使用JPA继承更改单个表子类中的discriminate-column

时间:2010-09-24 10:10:58

标签: java orm jpa domain-driven-design

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

     Instruction
       |      \
     Money    Other
     /   \ 
   Unit Cash 

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

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

所以我开始使用jpa的SINGLE_TABLE inhertance策略。使用orm xml Money分隔Otherdiscriminate-column="MONEY_TYPE_ID"类。

我的问题是我还想要分类子CashUnit 但他们在不同的栏目“CASH_TYPE_ID”上区别对待。

扫描文档这对我来说似乎不太可能,但我想知道有没有人有任何技巧或变通方法来实现这一点?

干杯

2 个答案:

答案 0 :(得分:1)

解决方法可能是为每个子类设置不同的鉴别器值,并且只有一个鉴别器列。即money = 1,other = 2,unit = 3,cash = 4

答案 1 :(得分:1)

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

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

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

PS:我稍后会发布代码