在grails域类中使用继承

在grails域类中使用继承,grails,groovy,gorm,Grails,Groovy,Gorm,我有每月的域类来按月将事务划分为[TxnSummaryJan,TxnSummaryFeb..等]。现在我正在尝试创建一个月域类,它是抽象的,并且在其中定义了所有字段,这样Jan、Feb类就可以扩展这个类了。 现在我已经设定了目标 tablePerHierarchy=0 在month类的映射中,这样grails就不会为此类创建表 现在表被正确地创建了,但是当我执行 Month.createCriteria().get( eq('userid',1)).list() 它给我的错误是get()函数

我有每月的域类来按月将事务划分为[TxnSummaryJan,TxnSummaryFeb..等]。现在我正在尝试创建一个月域类,它是抽象的,并且在其中定义了所有字段,这样Jan、Feb类就可以扩展这个类了。 现在我已经设定了目标

tablePerHierarchy=0

在month类的映射中,这样grails就不会为此类创建表

现在表被正确地创建了,但是当我执行

Month.createCriteria().get( eq('userid',1)).list() 
它给我的错误是get()函数对Month类不可用。但是当我举个例子的时候它就运行了

TxnSummaryJan.createCriteria().get(eq('userid',1)).list()
因为根据域模型,我应该在查询基类时得到结果,所以这里缺少什么


还有,在哪里放置月份域类?我是否需要将月份域放置在src/Domain之外,以便不创建其表

问候
Priyank

当使用tablePerHierarchy=false时,这也意味着不会创建基表。相反,它将每月创建一个表。对Month进行查询的唯一方法是对Month的所有特定子类进行查询,然后以某种方式合并结果。我认为这在GORM中是可能的,但也意味着奇怪/复杂的查询可能会出现意想不到的性能问题

如果您的设计意图是不在数据库中创建基表,那么只需将基类移动到src/groovy并将其标记为抽象。然后将tablesPerHierarchy设置为true,因为它是默认值。这样,您的所有数据都会在一个表中结束,但您可以一次访问所有数据


请参阅以供参考

当使用tablePerHierarchy=false时,这也意味着不会创建基表。相反,它将每月创建一个表。对Month进行查询的唯一方法是对Month的所有特定子类进行查询,然后以某种方式合并结果。我认为这在GORM中是可能的,但也意味着奇怪/复杂的查询可能会出现意想不到的性能问题

如果您的设计意图是不在数据库中创建基表,那么只需将基类移动到src/groovy并将其标记为抽象。然后将tablesPerHierarchy设置为true,因为它是默认值。这样,您的所有数据都会在一个表中结束,但您可以一次访问所有数据

请参阅以供参考