2012-03-26 21 views
13

Say bağlıyor:Katıştırılabilir varlık ben varlıkları şu var,

@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 
} 

Ben A ve C arasındaki dönüşümler içeren ek bir tablo elde Hibernate ile şema autogeneration özelliğinin kullanılması. Ama (örneğin ek tabloda olmadan) C içine A 'ın id ekleyerek bire çok ilişki uygulamak istiyorum.

Bu mümkün mü? Varsa, böyle bir harita oluşturmak için hangi ek açıklamaları kullanmalıyım?

cevap

7

Genel olarak bu @JoinColumn ek açıklamasında mümkündür. Ayrıca embeddables ile çalışır.

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

Ama nasıl A_ID' kimliklendiricisi 'O, belirtebilirim: Eğer gömülebilir verilen sütun için A_ID isimden memnun değilseniz

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

, Varlık A'da sütun adını geçersiz kılabilir varlık 'A'? – jFrenetic

+0

B'de verilen eşleştirmelerin A bağlamında değerlendirildiğini ve bu nedenle kalıcı sağlayıcınızın bunu bildiğini belirtmek zorunda değilsiniz. Veya belki de birleştirme sütun adını nasıl geçersiz kılacağınızı kastediyorsunuz. –

+0

Çok teşekkürler! Bu benim için çalıştı. Kalıcılık sağlayıcısına, kimliğin ne tür bir varlık aldığını açıkça söylemem gerektiğini düşündüm, ama biraz daha akıllıca olduğu ortaya çıktı :) – jFrenetic