在grails域类中使用继承

时间:2012-01-17 04:37:44

标签: grails groovy gorm

我有月度域类来按月分配事务[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

1 个答案:

答案 0 :(得分:1)

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

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

请参阅http://grails.org/doc/latest/guide/GORM.html#inheritanceStrategies以供参考。