使用继承重构 Grails 域 类

Refactor Grails Domain Classes with inheritance

我的 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 个 table,一个用于包含多个字段的消息,一个 table 用于 inbound_message,一个用于 outbound_message。 因此对于此示例,消息 table 具有列 field_a 和 field_b。 inbound_message table 有 field_in

因为 3 个 table 存在一些性能问题,我想将其更改为两个 table。所以 inbound_message 应该包含消息中的所有字段和 InboundMessage 中的附加字段。

所以应该只有两个table,inbound_message和outbound_message。 inbound_message 应包含 field_a、field_b 和 field_in 列 outbound_message 应包含 field_a、field_b 和 field_out

如何在不对我的 grails 代码进行太多更改的情况下实现这一点?保留抽象消息 class 将是完美的,这样我就可以在一个地方拥有每条消息的字段。 但最终结果应该是:数据库中只有两个table。

我找到了这个问题的解决方案:

在所有三个 类 中,我添加了以下代码:

static mapping = {       
    tablePerConcreteClass true
}

现在一切如我所愿