2012-04-10 45 views
0

是否可以執行下列操作...JPA:是否可以將派生類保存在其自己的表中,從而引用的字段是MappedSuperclass?

我有一個名爲MappedSuperclass行動:

@MappedSuperclass 
public class Action extends EntityBase 
{ 
    private static final long serialVersionUID = 2604473746836781718L; 

    private String event; 

    public String getEvent() 
    { 
     return event; 
    } 

    public void setEvent(String event) 
    { 
     this.event = event; 
    } 
} 

而且我有2類(實體),從這個類派生,例如GenericAction:

@Entity 
@Table(name = "GENERIC_ACTION") 
@AttributeOverrides({@AttributeOverride(name = "id", column = @Column(name = "GAC_ID")), 
     @AttributeOverride(name = "version", column = @Column(name = "GAC_VERSION")), @AttributeOverride(name = "event", column = @Column(name = "GAC_EVENT"))}) 
public class GenericAction extends Action 
{ 
    private static final long serialVersionUID = 2694061082912048881L; 

    @Column(name = "GAC_PAYLOAD") 
    private String payload; 

    public String getPayload() 
    { 
     return payload; 
    } 

    public void setPayload(String payload) 
    { 
     this.payload = payload; 
    } 
} 

在另一個實體,稱爲雜誌有這樣的動作屬性設置:

@Entity 
@Table(name = "JOURNAL") 
@AttributeOverrides({@AttributeOverride(name = "id", column = @Column(name = "JRN_ID")), 
     @AttributeOverride(name = "version", column = @Column(name = "JRN_VERSION"))}) 
public class Journal extends EntityBase 
{ 
    private static final long serialVersionUID = 2525323851057436815L; 

    @Column(name = "JRN_ACTION") 
    private Action action; 
} 

在我的代碼中,我實例GenericAction並將其設置爲Journal的setter。當Journal將被保存時,它應該將GenericAction的內容保存在它自己的表中,但這不會發生。它將GenericAction的字節碼保存到日誌的操作字段中。

這可能嗎?

回答

1

如果我得到你的問題正確,你可能建議立即進行刪除考慮以下

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 

默認繼承startegy是SINGLE_TABLE。至少JPA規範說明了這一點。我敢肯定,休眠遵循這個

JPA規範看一看這裏

http://docs.jboss.org/ejb3/app-server/HibernateAnnotations/reference/en/html_single/index.html

我略一兩件事: 你必須把@OneToOne或@ManyToOne annotaton你的動作特性所以你已經加入實體,否則它只是序列化行動的財產

+0

你說得對,它與繼承類型.TABLE_PER_CLASS一起工作。我把它放在一個抽象類「ActionBase」和GenericAction(和其他動作)擴展這個類。 – Bevor 2012-04-19 06:51:38

相關問題