是否可以以某种方式创建带有字段和这些字段的约束的特征,然后创建实现该特征的域类并选择带有约束的字段?
我的代码基本上看起来像:
trait Shared {
String sharedField
static constraints = {
sharedField nullable: true
}
}
class ImplementingClass implements Shared {
...
}
使用空共享字段保存 ImplementingClass 实例会因违反约束而被拒绝。
可以这样做吗?在域对象实现的特征中使用约束和其他 GORM 构造是否需要替代语法?
我也遇到了同样的问题,我查看了Grails的源代码并做了一些实验。
importFrom(Shared)
不起作用,因为 Grails 通过 constraints
查找 clazz.getDeclaredFields()
字段,这会导致特征的空数组。
现在您有两个选择:
class SharedConstraints {
String sharedField
static constraints = {
sharedField nullable: true
}
}
现在您可以将
SharedConstraints
与 importFrom
一起使用
在同一个包中创建一个SharedConstraints.groovy:
constraints = {
sharedField nullable: true
}
如果您将 IntelliJ 与 Grails 3.0(也许还有其他版本)一起使用,则必须将脚本放置在 resources 文件夹中。如果您按照 Grails 文档中的说明将该文件放置在 src/java 文件夹中,则该脚本将被编译并且将无法工作
我所做的是创建一个特征和一个类来提供约束。 这可以很容易地扩展为让
Product
类实现多个特征和相关约束......
class Product implements FormatsTrait {
static constraints {
importFrom FormatsConstraints
}
}
trait FormatsTrait {
String formats
}
class FormatsConstraints implements FormatsTrait {
static constraints {
formats nullable:true
}
}