2010-09-24 97 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