是否有可能以某种方式为这些字段创建包含字段和约束的特征,然后创建实现该特征的域类并选择具有约束的字段?
我的代码基本上是这样的:
trait Shared {
String sharedField
static constraints = {
sharedField nullable: true
}
}
class ImplementingClass implements Shared {
...
}
然后使用null sharedField保存一个ImplementingClass实例,但会违反约束。
有可能这样做吗?是否有在域对象实现的特征中使用约束和其他GORM结构所需的替代语法?
答案 0 :(得分:1)
我遇到了同样的问题,我查看了Grails的源代码并进行了一些实验。
importFrom(Shared)
无效,因为Grails通过constraints
查找clazz.getDeclaredFields()
字段会导致特征为空数组。
现在您有两个选择:
1)制作一个看起来像你的特征的Java / Groovy类,但只包含属性和约束图
class SharedConstraints {
String sharedField
static constraints = {
sharedField nullable: true
}
}
现在,您可以将SharedConstraints
与importFrom
2)为约束创建一个groovy脚本(http://docs.grails.org/latest/guide/hibernate.html#addingConstraints)。此功能主要用于Java域类,但也可用于特征。
在同一个包中创建SharedConstraints.groovy:
constraints = {
sharedField nullable: true
}
如果您将IntelliJ与Grails 3.0一起使用(也可能是其他版本),则必须将脚本放在resources文件夹中。如果您将文件放在sils / java文件夹中,如Grails文档中所述,脚本将被编译,并且无法正常工作