2010-09-24 91 views
1

单个表子类更改判别列我有一个看起来像这样的域模型:与JPA继承

 Instruction 
     |  \ 
    Money Other 
    / \ 
    Unit Cash 

,我想这个模型映射到使用JPA我的数据库。

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

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

我的问题是我也想sperate子类CashUnit ,但他们在不同的列“CASH_TYPE_ID”歧视。

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

干杯

+0

那么最后期望的结果是什么? 2个鉴别器列? – 2010-09-24 13:43:57

+0

是的,我基本上想在对象层次结构中使用2个不同的鉴别器列。 – alanl 2010-09-24 16:41:10

+1

谁需要CASH_TYPE_ID?在这种情况下MONEY_TYPE_ID应该包含什么?您能否展示一些示例记录来说明限制(对于其他应用程序),这可能有助于找到可接受的工作解决方案。 – 2010-09-25 15:02:25

回答

1

考虑到这一点,在当前的JSR规范中没有解决这个问题的方法。

所以我决定到底要干什么,是使用JPA单表继承了'InstructionMoney”和“Other”类型,然后允许“Cash”和'Unit'子类型从这些简单的inhert的。 (即)'discriminate-column="MONEY_TYPE_ID"'

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

PS:我稍后会发布代码

1

一种解决方法可以是具有不同的鉴别器值为每个子类,并且只有一个识别器字段。即货币= 1,其他= 2,单位= 3,现金= 4

+0

是的,这将工作,但不幸的是表与其他应用程序共享,所以不能改变其结构。干杯 – alanl 2010-09-24 12:57:25