2009-09-03 190 views
1

我有一個類ClassA映射到TableA。我也有一個映射,它有一個EntityA的實體名稱。Hibernate映射繼承

現在,我需要在TableA的ClassA之間創建另一個名爲EntityATwo的映射,但略有不同。

儘管我可以複製粘貼EntityA到EntityATwo的映射,但要維護這一點非常困難。

因此,我的問題是,我該如何創建EntityATwo的映射,其中我只聲明EntityATwo和EntityA之間的不同,而映射的其餘部分則來自EntityA。

感謝, 弗朗茨

+0

+1對於精確的問題和良好的交互 – KLE 2009-09-03 11:09:50

回答

1

我不知道一個辦法直接做到這一點。但經你的允許,我可以詳細說明。


在我們的代碼,我們通常喜歡一個Java類映射到一個語義(我們更願意與比選中字符串編譯檢查類工作)。因此,我們將映射到兩個類而不是將類兩次映射到具有不同實體名稱的表。 我們將有:

  • ClassA作爲常見的超類,大多數映射是常見的。它在所有這個映射中被聲明(在hbm.xml中)。
  • ClassA1擴展了ClassA,提供了它的唯一映射(如果需要,還提供了java代碼,否則它可能是空的)。它繼承了ClassA的通用映射。
  • ClassA2也

您不必重複了。你從語義上獲得了一些東西。


另一種可能性是在Java類使用註解,只對共同映射。在Hibernate中,註釋可以被xml映射覆蓋(或完成)。所以我想你可以只覆蓋xml中的相關部分,並且你不會有重複。

+0

請隨時詳細說明一些:-) 我想我可以有兩個類映射到同一個表。但是,我仍然認爲EntityATwo地圖與EntityA地圖的地圖幾乎相同,只是略有不同。 謝謝 – 2009-09-03 10:09:59

+0

@Franz我編輯着重於您的評論。它更清楚嗎?休眠站點已關閉,所以我無法提供鏈接。 – KLE 2009-09-03 10:15:00

+0

好吧,所以你有ClassA1和ClassA2都從Java端擴展ClassA。 ClassA映射到TableA(例如)。此外,ClassA1和ClassA2映射到TableA。 但是,您如何準確指定ClassA1和ClassA2繼承ClassA的通用映射? 謝謝 – 2009-09-03 10:41:18