【发布时间】:2011-04-25 10:49:12
【问题描述】:
这是我想做的:
class A {
String string
static constraints = {
string(maxSize:100)
}
}
class B extends A {
static constraints = {
string(url:true)
}
}
所以类 A 应该有 一些 约束,而 B 应该在同一属性上具有 相同的加额外 约束。
但我无法让它工作,我可以想象它会与每层次结构表的概念发生冲突。
所以我尝试通过引入具有 B 类约束的 Command 对象来解决该问题,该约束可以在 B 类的构造函数中进行验证。但是,Command 对象似乎只能在控制器中使用(grails 一直说有没有 .validate() 方法)。
所以我的问题是:使用 grails 约束解决这个问题的最优雅的方法是什么(不是手动重新实现验证)?可能是……
- 切换到 Table-per-Sub-Class 概念?
- 以某种方式使命令对象在 Domain 类中工作?
- 还有其他方法吗?
编辑:我可以在子类中定义所有约束,重复父类的约束,甚至在父类中根本没有约束。但该解决方案应该适用于同一父类的多个子类(具有不同的约束)。
【问题讨论】:
-
我不确定每个约束都会以这种方式工作,因为默认情况下继承的类映射到同一个数据库表。因此,如果您的 C 类在 Cc 上具有非空的唯一约束,它将对整个表 A 施加 DB 表约束 - 所有类都将存在 c 字段,并且对于除 C 实例之外的任何内容都将为空。
-
是的,这就是我使用 Table-per-Sub-Class 的原因。
标签: inheritance grails constraints subclass command-objects