2015-06-26 39 views
1

我創建了3個實體類,名爲NodeBase,NodeDocumentNodeFolderJPA TABLE_PER_CLASS繼承:創建抽象實體表

使用表每類繼承stategy和如表每類繼承定義的一個表被定義爲繼承層次結構中的每個具體的類,在這種情況下NodeBase是抽象的實體但該實體的表中創建命名NODEBASE

Entity relationship diagram

@Entity 
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 
public abstract class NodeBase implements Serializable { 

    @Column(name="NBS_UUID") 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Long uuid; 

    @Column(name="NBS_NAME") 
    @Basic 
    private String name; 

    @ManyToOne(targetEntity = NodeFolder.class) 
    private NodeFolder parent; 

} 


@Entity 
@Table(name="SDM_NODE_DOCUMENT") 
public class NodeDocument extends NodeBase implements Serializable { 

    @Column(name="NDC_MIMETYPE") 
    @Basic 
    private String mimeType; 

} 

@Entity 
@Table(name="SDM_NODE_FOLDER") 
public class NodeFolder extends NodeBase implements Serializable { 

    @OneToMany(targetEntity = NodeBase.class,mappedBy = "parent") 
    private Collection<NodeBase> children; 
} 

如何創建實體類,以僅兩個表應創建一個名爲SDM_NODE_DOCUMENTSDM_NODE_FOLDER的方法嗎?

enter image description here

+0

或許說明什麼是你的JPA實現可能會有幫助,因爲有一個抽象表對這個策略沒有意義 –

+0

使用Eclipselink JPA實現。 – jGauravGupta

回答

0

日食鏈接報道要做到這一點,至少在早期版本中,一些人說,這是一個錯誤,或者也許不是,只是通過的EclipseLink產生的表做的所有表的聯合繼承。

如果父類是抽象的,你可以使用@MappedSupperclass代替@Entity anotation避免表的創建,如果你不quering抽象類