2012-01-17 50 views
1

我有每月域类来按月分配事务[TxnSummaryJan,TxnSummaryFeb..etc]。现在我正在尝试创建一个Month域类,它是抽象的,并且定义了其中的所有字段,以便Jan,Feb类只是扩展这个类,就是这样。 现在我已经设置了在grails域类中使用继承

tablePerHierarchy = 0

在当月类别的映射,这样的Grails不会为这个类来创建一个表。

现在越来越正确创建的表,但是当我执行

Month.createCriteria().get(eq('userid',1)).list() 

它给了我错误得到()函数不可用Month类。但在运行时我给例如

TxnSummaryJan.createCriteria().get(eq('userid',1)).list() 

缺少什么我在这里根据域模型,我应该得到的结果,当我查询的基类,因为?


此处还可以放置Month Domain类?我是否需要在src/Domain之外放置月份域,以便其表未创建?

问候 Priyank

回答

1

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

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

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