我的grails应用程序中有3个对象:
abstract class Message {
//many fields here
static mapping = {
tablePerHierarchy false
}
int fieldA
int fieldB
}
class InboundMessage extends Message {
//some fields
int field_in
}
class OutboundMessage extends Message {
//some fields
int field_out
}
在数据库中,我有3个表,一个用于具有许多字段的消息,一个用于inbound_message和一个用于outbound_message。因此,对于本例,消息表具有field_a和field_b列。inbound_message表有field_in
因为这3个表有一些性能问题,我想把它改成2个表。因此,inbound_message应该包含来自message的所有字段和来自InboundMessage的附加字段。
所以应该只有两个表,inbound_message和outbound_message。Inbound_message应该有field_a, field_b和field_in列Outbound_message应该有field_a、field_b和field_out列
我如何在不改变太多grails代码的情况下实现这一点?保留抽象消息类将是完美的,这样我就可以在一个地方拥有每个消息的字段。但是最终的结果应该是:数据库中只有两个表。
我找到了一个解决这个问题的方法:
在这三个类中我添加了以下代码:
static mapping = {
tablePerConcreteClass true
}
现在它正在工作,如我所料