2013-11-22 28 views
-1

我試圖做下一個例子。我想聲明一個POJO類(ClassA)來定義我的類,但是我使用了擴展ClassA並具有業務邏輯的其他類(ClassB)。我不能在休眠模式下映射這個類

這種情況:

//model object 
public abstract class ClassA implements Serializable { 

    private String att1; 
    ... 
    constructors... 
    ... 
    gettters and setters... 
} 

//Business object 
public class ClassB extends ClassA { 

    //With all business logical. 
} 

這樣,總是該模型已經改變了我只需要改變ClassA的。

我試了很多次......這可能嗎?有沒有更好的方法來製作它?

謝謝, Juankar!

+0

業務(也包括數據訪問)邏輯不應該在您的實體模型中。 –

回答

0

閱讀此鏈接:Hibernate

它可以直接定義的Hibernate映射下的子類,工會的子類,並在多個映射文件中加入了子類映射。這使您可以通過添加新的映射文件來擴展類層次結構。你必須在子類映射中指定一個extends屬性,命名一個先前映射的超類。此前,此功能使得映射文檔的排序非常重要。從Hibernate3開始,使用extends關鍵字時,映射文件的排序是無關緊要的。單個映射文件中的排序仍然需要在子類之前定義爲超類。

<hibernate-mapping> 
<subclass name="DomesticCat" extends="Cat" discriminator-value="D"> 
     <property name="name" type="string"/> 
</subclass> 

0

我有解決方案。這樣,當模型改變時,我只需要改變抽象類。

//model object 
@MappedSuperclass 
@Table(name="TABLE_NAME") 
public abstract class ClassA implements Serializable { 

    @Id 
    @GeneratedValue 
    @Basic 
    @Column(name = "COLUMN_NAME") 
    private String att1; 
    ... 
    constructors... 
    ... 
    gettters and setters... 
} 

//Business object 
@Entity 
@Table(name="TABLE_NAME") 
public class ClassB extends ClassA { 

    //With all business logical. 

    //Without field's annotations 
} 

非常感謝, Juankar!