2015-05-18 83 views
0

我與複合ID的實體,我使用Hibernate的多個ID屬性,而無需標識類型,就像這樣:休眠多個ID屬性不能正常工作

@Entity 
class MyEntity implements Serializable { 

    @Id 
    private Long id1; 

    @Id 
    private Long id2; 

    //... Getters , setters , hashcode , equals ... 
} 

的問題是,在我的數據庫:ID1 = 1,ID2 = 2

如果我想添加一行:ID1 = 2,ID2 = 2

我得到一個錯誤ConstraintViolationException:重複的項目 '2' 鍵 'ID2'

我使用Hibernate 4.1.7, 的文檔鏈接:http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#mapping-declaration-id

更新

我說的是一個特定的Hibernate的解決方案:映射多個屬性爲@Id性能不宣而外部類是標識符類型

+0

看看這個:http://stackoverflow.com/questions/3585034/how-to-map-a-composite-key-with-hibernate – SaintLike

+0

謝謝,但我只想知道爲什麼它不起作用 –

+0

這是不可能的知道那個小代碼樣本。 – SaintLike

回答

0

使用EmbeddedId。請參閱this

+0

謝謝,我知道它可以與EmbeddedId一起使用。但是在Hibernate文檔中有一個'5.1.2.1.2.Multiple id properties without without type'的部分,他們說在沒有EmbeddedId的情況下它可以工作,並且你可以檢查他們給出的代碼片段 –

0

這很可能不是你的代碼,而是你的數據庫模式。不知道你正在使用的DBMS和MyEntity表上的約束/索引,這是不可能的。然而我的猜測是,你有這樣的事情:

CREATE UNIQUE INDEX ON my_entity (id1); 
CREATE UNIQUE INDEX ON my_entity (id2); 

這就要求每列分別包含唯一的值,當你真的想是這樣的:

CREATE UNIQUE INDEX ON my_entity (id1, id2); 

,讓每列包含只要兩列的組合是唯一的,就可以重複相同的值。