2014-10-05 35 views
0

Hibernate映射我有這個類與泛型

public class FolderOwner<T> { private T owner; }

其中邏輯,T可能是一個User

public class User { 
    private String id; 
    private String lastName, firstName, middleName; 
} 

Department

public class Department { 
    private long id; 
    private String name; 
} 

現在,我有這個類有一個實例的屬性

public class Folder { 
    private FolderOwner owner; 
    //other attributes 
} 

我的問題是如何將它們映射在Hibernate中,考慮FolderOwner那些泛型類型?我已經閱讀了這個論壇上的一些答案,but they've done them using annotations.我對Hibernate映射很陌生,我更喜歡XML映射而不是註釋。

我對User

<class name="com.fileManagement.dataDesign.User" table="user"> 
    <id name="id" type="string" column="id"/> 
    <property name="lastName" column="lastName" type="string" not-null="true"/> 
    <property name="firstName" column="firstName" type="string"/> 
    <property name="middleName" column="middleName" type="string"/> 
</class> 

我映射映射部

<class name="com.fileManagement.dataDesign.Department" table="department"> 
    <id name="id" type="int" column="id"> 
     <generator class="native"/> 
    </id> 
    <property name="name" column="name" type="string"/> 
</class> 

請幫助。謝謝。

回答

0

如果您想要所有表中存在的基本數據字段,請在您的基類中使用@MappedSuperclass並從那裏擴展實體。

更新

有不同類型的繼承,你可以用Hibernate使用。請參閱http://docs.jboss.org/hibernate/orm/3.5/reference/en/html/inheritance.html的優秀文檔。

除了繼承hibernate之外,jpa還有@mappedsuperclass註解。優點是你的超級類必須是一個實體,你可以重用你已經註釋過的所有東西。

我的用例是三個相同的表格(dimension1,dimension2,dimension3),這些表格被另一個表格引用。 但是你可以想到很多其他的好例子,比如創建,刪除和更新時間戳,onwer,createdBy和updatedBy等字段...

你只需要像通常那樣在超類字段中進行註釋你實體和擴展類。

+0

請賜教。我沒有在這裏使用過繼承。 – 2014-10-05 09:02:22

+0

更新了答案。需要的代碼? – Hannes 2014-10-05 09:51:57

+0

謝謝,但是我要說的是我沒有在我的代碼中使用繼承。用戶和部門沒有共同的基礎類(除了Object off課程)。我想完成的是我想休眠映射我的FolderOwner 類,其中T可能是一種用戶或部門。 在我的設計中,Folder類具有FolderOwner屬性。這意味着Folder類的實例可能有FolderOwner 或FolderOwner 。這個主題http://stackoverflow.com/questions/7000428/using-hibernate-with-generics主要回答,但他們使用註釋來實現它。我想要XML。 – 2014-10-05 10:26:42