2016-03-03 102 views
0

我有以下問題,我有一個已經存在的表有三個字段field1,field2,field3。 Field1實際上是一個外鍵(@OneToOne)到另一個表。所有field2和field3都可以爲空,所以我不能爲所有三個字段設置主鍵。在數據庫中有一個Field1 + field2 + field3的UniqueConstraint。JPA /休眠 - 使用唯一約束作爲主鍵

field1 | field2 | field 3 
1  | 1 | null 
1  | null | 2 
3  | 1 | null 

我試過JPA /休眠的幾個解決方案,但找不到一個好的。 沒有定義@Id JPA無法工作(當然)。定義@Embeddable中的三個字段並將其與重複使用@EmbeddedId在不允許空值的所有三個字段上創建主鍵。

是否有任何其他解決方案,而不是改變現有的表,併爲每一行添加一個自動生成的ID?

非常感謝你&最好的問候!

+0

什麼是Field2,Field3用於?他們是否在另一張桌子上?請注意,Field1與父表具有ManyToOne關係,id 1在那裏有兩次。 –

回答

0

你試過了嗎?

@Table(
    name="xxx", 
    uniqueConstraints= 
     @UniqueConstraint(name="my_unique_key", columnNames={"field1", "field2", "field3"}) 
)