【问题标题】:Changing the discriminate-column in a single table sub class with JPA inheritance使用 JPA 继承更改单个表子类中的区分列
【发布时间】:2010-09-24 10:10:58
【问题描述】:

我有一个如下所示的域模型:

     Instruction
       |      \
     Money    Other
     /   \ 
   Unit Cash 

我想使用 JPA 将此模型映射到我的数据库。

所有类都映射到数据库中的同一个表 (T_INSTRUCTION)。

所以我开始使用 jpa 的 SINGLE_TABLE 继承策略。使用 orm xml discriminate-column="MONEY_TYPE_ID" 分隔 MoneyOther 类。

我的问题是我还想拆分子类CashUnit 但他们区分不同的列“CASH_TYPE_ID”。

扫描文档这对我来说似乎是不可能的,但我想知道那里有没有人有任何技巧或解决方法来实现这个?

干杯

【问题讨论】:

  • 那么最后的预期结果是什么? 2 个鉴别器列?
  • 是的,我基本上想在对象层次结构中使用 2 个不同的鉴别器列。
  • 究竟谁需要 CASH_TYPE_ID?在这种情况下,MONEY_TYPE_ID 应该包含什么?您能否展示一些示例记录来说明约束(对于其他应用程序),这可能有助于找到可接受的工作解决方案。

标签: java orm jpa domain-driven-design


【解决方案1】:

一种解决方法可能是为每个子类设置不同的鉴别器值,并且只有一个鉴别器列。即钱=1,其他=2,单位=3,现金=4

【讨论】:

  • 是的,可以,但不幸的是,该表与其他应用程序共享,因此无法更改其结构。欢呼
【解决方案2】:

进一步研究了这个问题,在当前的 JSR 规范中没有解决这个问题的方法。

所以我最终决定做的是,对'Instruction'、'Money'和'Other'类型使用jpa单表继承,然后允许'Cash'和@ 987654325@ 简单继承自这些子类型。 (即)'discriminate-column="MONEY_TYPE_ID"'

然后使用'cash'和'unit'中的构造函数来设置映射到CASH_TYPE_ID的字段。

PS:我稍后会发布代码

【讨论】:

    猜你喜欢
    • 2019-09-04
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2010-11-27
    • 2013-09-17
    • 1970-01-01
    相关资源
    最近更新 更多