我在其他網站(和這裏)上問了幾次,但我想我會再試一次,因爲我真的沒有找到答案。我很喜歡hibernate,而且我很害怕在hibernate的論壇上發帖。我主要使用Hibernate 3.6的JPA註釋。如何使用鑑別器/繼承來管理沒有表的空實體和/或實體
我有以下模式:
所以基本上這是一個傳統的DB。提名是中央表,我有4種特定類型的提名:
- 同事(僅使用NOMINATION表列作爲屬性)
- 小組(NOMINATION + TEAM_NOM表)
- 理念(NOMINATION + IDEA_NOM表)
- 成功(提名+ SUCCESS_NOM表)
所以我所做的就是用一個鑑別(和繼承),以建立自己的實體。例如:
這裏的實體提名:
@Entity(name = "Nomination")
@Table(name = "NOMINATION")
@DiscriminatorColumn(name="CATEGORY_CODE", discriminatorType = DiscriminatorType.STRING, length = 1)
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Nomination extends AuditableEntity {
而這裏的我是如何編碼的團隊,理念和成功的實體:
@Entity(name = "TeamNom")
@Table(name = "TEAM_NOM")
@DiscriminatorValue("T")
@PrimaryKeyJoinColumn(name = "NOM_ID")
public class TeamNom extends Nomination {
現在的同事,我做了以下內容:
@Entity(name = "CoworkerNom")
@DiscriminatorValue("C")
@PrimaryKeyJoinColumn(name = "NOM_ID")
public class CoworkerNom extends Nomination {
正如你所看到的,我有一個很大的問題。 Hibernate正在尋找名爲「CoworkerNom」的表,但我沒有任何數據庫。我試圖將「提名」列爲表格,因爲我的想法不合理,但從邏輯上講,它給了我一個循環依賴的錯誤。
那麼我該如何處理這個沒有表格和沒有屬性的實體呢?其他實體顯然工作得很好。
它看起來像我在你的域類中混入你的dao類。 CoworkerNom不是一張桌子,所以爲什麼要嘗試繪製它?可能有辦法做你想做的事,但我不確定。您可以讓提名爲具體類,並創建一個數據庫視圖名稱CoworkerNom,它只是從提名中選擇*,然後像上面那樣映射它,然後將實體名稱更改爲視圖的名稱。 – 2012-02-14 21:12:01
我討論過這個問題,還考慮製作一張名爲Coworker的表格,並僅在其上傾銷ID。這是一個有趣的解決方案,但我寧願通過Hibernate來解決這個問題。無論哪種方式感謝答覆,我會考慮它。 – Nimchip 2012-02-14 21:22:18