我有一个特征和以下域类:
trait Named {
String name
static constraints = {
name blank:false, unique:true
}
}
@Entity
class Person implements Named {
String fullName
static constraints = {
fullName nullable:true
}
}
@Entity
class Category implements Named {
}
在此设置中,命名约束在Category
中工作正常,但在Person
中被忽略。
如何将特征的约束包含在实现域类的constraints
块中?
如何将特征的约束包含在约束块中 的实现域类?
框架不支持它。
我找到了重用约束的最不痛苦的方法。
我添加了一个新类:
class CommonConstraints {
static name = {
name blank:false, unique:true
}
}
然后,我没有importFrom Named
不起作用,而是撒了一些时髦的魔法:
@Entity
class Person implements Named {
String imgUrl
String fullName
static constraints = {
CommonConstraints.name.delegate = delegate
CommonConstraints.name()
fullName blank:false, unique:true
imgUrl url:true
}
}
它就像魅力一样工作。
是的,该解决方案与继承/实现模型不一致,但可以完成代码重用的工作。
对于不太棘手的情况,域类没有自己的约束,将使用来自特征的约束,就像我最初的问题一样。