2012-04-28 51 views
3

假設您有兩個實體,一個爲Article,另一個爲Fruits。現在實體Article的所有屬性都由實體Fruits繼承。如何連接表並擁有其中每一個的所有屬性?

因此,可以說,我有列第表:

ART_ID 
ART_NAME 
ART_COST 

和水果表列:

FRU_ID 
FRU_FROZEN 

現在,我想有可能在我的JPA的代碼,當檢索Fruit對象我檢索所有應該是它們的數據,這些數據由我的ArticleFruit表中的信息組成 - ART_ID,ART_NAME,ART_COSTFRU_IDFRU_FROZEN

這是可能的JPA?我應該使用@Inheritance@JoinColumn還是什麼?如果需要可以提供代碼。


*編輯*

我的結論是,下面的代碼會適合我的需要:

@Entity 
@Table(name = "Article") 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class Article { 
    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    @Basic(optional = false) 
    @Column(name = "ART_ID") 
    private Long id; 

    @Basic(optional = false) 
    @Column(name = "ART_NAME") 
    private String name; 

    @Basic(optional = true) 
    @Column(name = "ART_COST") 
    private String cost; 

    // ... 
} 

@Entity 
@Table(name="Fruits") 
@AttributeOverrides({ 
@AttributeOverride(name="name", [email protected](name="ART_NAME")), 
@AttributeOverride(name="cost", [email protected](name="ART_COST")), 
}) 
public class Fruits extends Article { 

    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    @Basic(optional = false) 
    @Column(name = "FRU_ID") 
    private Long fruitID; 

    @Column(name="FRU_FROZEN") 
    private String fruFrozen; 

    //... 
} 

謝謝!

+0

你的內容在數據庫級別有什麼關係?關聯表?外鍵關係? – Perception 2012-04-28 15:48:43

+0

外鍵關係。 :) – 2012-04-28 15:52:07

回答

1

是你所有的FruitsArticle s?如果類之間存在真正的泛化(繼承)關係,請使用@Inheritance和join表策略。

你可以在Fruits上查詢,而Hibernate可以完成所有的功能。

順便說一句,如果你想在Article的表中有一個鑑別器列(連接策略與鑑別器的組合)。使用單表策略映射它,並在子類中定義@SecondaryTable,這就是Hibernate如何支持它。

+0

好吧,爲了指出我,我會用建議的獎勵這個答案。 – 2012-04-28 17:53:13

相關問題