2011-10-15 51 views
3

我是Java和Hibernate的新手。我有組合鍵的問題。我試圖做這樣的事情:具有非原始屬性的複合主鍵

@Entity 
class A { 
    @Id 
    int id; 
} 

@Entity 
class B { 
    @Id 
    int id; 
} 


@Entity 
class C { 
    @EmbeddedId 
    C_PK c_pk; 
} 

@Embeddable 
class C_PK { 
    A a; 
    B b; 
} 

當我執行

... 
session.save(c); 
... 

然後拋出異常是A型和B不能插入到數據庫中。是否有可能以某種方式告訴hibernate不保存A對象,而只保存A ID?我的方法是絕對錯誤的,我應該在C_PK類中使用原始數據類型嗎?

回答

1

您應該在C_PK中的A和B引用上加入@ManyToOne(或OneToOne)加入列。

@Embeddable 
class C_PK { 
    @ManyToOne 
    A a; 
    @ManyToOne 
    B b; 
} 
+1

請閱讀第2.2.3.2節 - http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#d0e2177。 「雖然在JPA中不支持,但Hibernate允許您將關聯直接放置在嵌入式ID組件中(而不必使用@MapsId註釋)。」 – gkamal

+0

對不起,我錯了,它真的看起來不合適。一旦你編輯答案,我會恢復不公正的投票。 – MaDa