如何从特质中"inherit"约束?



我有一个特征和以下域类:

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
}
}

它就像魅力一样工作。

是的,该解决方案与继承/实现模型不一致,但可以完成代码重用的工作。

对于不太棘手的情况,域类没有自己的约束,将使用来自特征的约束,就像我最初的问题一样。

相关内容

  • 没有找到相关文章

最新更新