根据the Grails GORM guide,除非tablePerHierarchy设置为false,否则域类的子类与父类共享同一个表。
由于“abstract”关键字
,我无法找到有关以下映射语句是否被忽略的信息abstract class Item implements Comparable{
static mapping = {
tablePerHierarchy true
}
...
我的数据库不包含Item表,每个子类有一个表(tablePerHierarchy的预期状态== false)。
我是否需要使Item具体但在验证中不允许它?我打算让一个ItemController使用< select>选择子类。在创建形式。
答案 0 :(得分:4)
我相信你已经解决了这个问题,但今天我遇到了同样的问题,所以我想我会插话。
在Grails / Gorm文档的5.2.3节中,它指出“GORM支持从抽象基类和具体的持久GORM实体继承” (http://www.grails.org/doc/1.0.x/guide/5.%20Object%20Relational%20Mapping%20(GORM).html)。
有趣的是,他们没有在本节的示例中提供抽象类的示例。
我尝试过,在我的层次结构中有一个抽象类(在层次结构的顶部,然后在其中一个分支下面)。每当我试图坚持一个抽象的子类的对象时,我就会失败。
我首先从层次结构的顶部删除了abstract关键字,然后我获得了更多积极的结果。最后,我从层次结构中的所有分支中删除了abstract关键字,一切正常。
所以,我的结论是,在实践中,你可以在Gorm层次结构中使用abstract关键字。
所以我计划的层次结构就是一些简单的数据类型,例如: abstract Type< - 具体文字< - 具体网址 abstract Type< - abstract Numeric< - concrete Integral abstract Type< - abstract Numeric< - 具体十进制
必须成为: 具体类型< - 具体文本< - 具体网址 concrete type< - concrete Numeric< - concrete Integral 具体类型< - 具体数字< - 具体十进制
即使我无意直接创建Type或Numeric的实例。
对于披露,我仍然使用Grails 1.1.2,直到我认为1.2足够稳定。