hibernate - 使用继承重构 Grails 域类
问题描述
我的 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 个表存在一些性能问题,所以我想将其更改为两个表。因此 inbound_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
}
现在它正在按我的预期工作
推荐阅读
- javascript - 无法访问 JavaScript 中的任何库
- python - AWS Glue - 如何使用 BOTO3 更改 Glue 目录表中的列名?
- oracle - 使用 Oracle APEX 表单,是否可以根据下拉菜单中的其他选择使其他字段变灰?
- azure - 是否有用于在测试或 CI 环境中运行的 docker 映像来代替 Azure 事件中心?
- php - 将countif mysql查询表显示为html
- java - 如何使用 Graphics 在整齐的列中打印 Java 数组?
- c - 为什么非整数输入会导致无限循环?
- c - 无法确定按位运算背后的原因
- python - GUI部分有效,为什么我得到“y = x [“main”] KeyError:'main' python”
- c - 根据当前最高 ID 为结构设置 ID