我有月度域类来按月分配事务[TxnSummaryJan,TxnSummaryFeb..etc]。现在我正在尝试创建一个抽象的Month域类,并在其中定义了所有字段,以便Jan,Feb类只是扩展这个类就可以了。 现在我已经设置了
tablePerHierarchy = 0
在月份类的映射中,以便grails不会为此类创建表。
现在正在创建表格,但是当我执行
时Month.createCriteria().get( eq('userid',1)).list()
它给我一个错误,即get()函数不适用于Month类。但是当我举例时它会运行
TxnSummaryJan.createCriteria().get(eq('userid',1)).list()
我在这里缺少什么,因为根据域模型,我在查询基类时应该得到结果?
还有哪里放置Month Domain类?我是否需要将月域放在src / Domain之外,以便不创建其表?
此致 Priyank
答案 0 :(得分:1)
使用tablePerHierarchy = false时,这也意味着不会创建基表。相反,它将每月创建一个表。对Month执行查询的唯一方法是对Month的所有特定子类进行查询,然后以某种方式合并结果。我认为这可能适用于GORM,但也可能意味着奇怪/复杂的查询可能会出现意想不到的性能问题。
如果您的设计意图是不在数据库中创建基表,那么只需将基类移动到src / groovy并将其标记为抽象。然后将tablesPerHierarchy设置为true,因为它是默认值。这样,您的所有数据都会在一个表格中结束,但您可以一次访问所有数据。
请参阅http://grails.org/doc/latest/guide/GORM.html#inheritanceStrategies以供参考。