2012-03-26 65 views
13

說,我有以下實體:與@OneToMany嵌入實體屬性

@Entity 
public class A { 
    @Id 
    @GeneratedValue 
    private Long id; 

    @Embedded 
    private B b; 

    //getters and setters 
} 

@Embeddable 
public class B { 
    @OneToMany 
    private List<C> cList; 
    //getters and setters 
} 

@Entity 
public class C { 
    @Id 
    @GeneratedValue 
    private Long id; 
    //other fields, getters and setters 
} 

使用模式,自動生成功能,以Hibernate我得到它包含AC之間的映射一個額外的表。但我希望通過將AID加入C,例如沒有附加表)來實現一對多關係。

這可能嗎?如果是,我應該用什麼註釋來創建這樣的映射?

回答

7

通常可以使用@JoinColumn註釋。它也適用於嵌入式。

@OneToMany 
@JoinColumn(name="A_ID") 
private List<C> cList; 

如果你不快樂與嵌入給出A_ID名稱欄,您可以在實體中的替換列名:

@AssociationOverride(name= "cList", 
     joinColumns = @JoinColumn(name="SOME_NAME_FOR_JOIN_COLUMN_IN_TABLE_C")) 
@Embedded 
private B b; 
+0

但是我怎麼規定,即'A_ID'是標識符實體'A'? – jFrenetic 2012-03-26 19:09:52

+0

您不必指定,B中給出的映射在A的上下文中進行評估,這就是您的持久性提供者知道它的原因。或者,也許你的意思是如何覆蓋連接列名 - 我添加了示例來回答。 – 2012-03-26 19:31:38

+0

非常感謝!這對我有效。我以爲我需要明確地告訴持久化提供者從哪個實體獲得'id',但事實證明它有點聰明:) – jFrenetic 2012-03-26 19:59:56