有没有可能以某种方式创建一个带有字段和这些字段的约束的trait,然后创建实现该trait的域类并选择带有约束的字段?
我有一个代码,基本上看起来像:
trait Shared {
String sharedField
static constraints = {
sharedField nullable: true
}
}
class ImplementingClass implements Shared {
...
}
保存具有空sharedField的ImplementingClass示例将被拒绝,并违反约束。
有没有可能做到这一点?有没有一个替代的语法,需要使用约束和其他GORM结构在域对象实现的traits?
1条答案
按热度按时间5sxhfpxr1#
我也遇到了同样的问题,我查看了Grails的源代码并做了一些实验。
importFrom(Shared)
将不工作,因为Grails通过clazz.getDeclaredFields()
查找constraints
字段,这将导致traits的空数组。现在你有两个选择:
1.创建一个Java/Groovy类,它看起来像你的trait,但只包含属性和约束Map
现在,您可以将
SharedConstraints
与importFrom
一起使用1.为约束创建一个groovy脚本。此功能主要用于Java域类,但也可用于traits。
在同一个包中创建一个SharedConstraints.groovy:
如果您使用IntelliJ和Grails 3.0(可能还有其他版本),则脚本必须放在resources文件夹中。如果您按照Grails文档中的描述将文件放在src/java文件夹中,则脚本将被编译,并且不会工作x1c 0d1x
还请注意此错误https://github.com/grails/grails-core/issues/10052