2013-11-25 18 views
0

你好我想在兩個引用的列添加一個唯一約束:添加唯一約束在muliple參考列

@Entity() 
@Table(uniqueConstraints = @UniqueConstraint(columnNames = { "ast", "tfs" })) 
public class N extends UUID { 

@ManyToOne(optional = false) 
@JoinColumn(name = "ast") 
private A ast; 

@ManyToOne(optional = false) 
@JoinColumn(name = "tfs") 
private T tfs; 

在類UUID是用於產生主ID的邏輯。

休眠生成3約束,PK,2次要鍵..但我期待4約束。 有人有想法嗎?

編輯:

@Entity 
public class A extends UUID implements Serializable { 

@OneToMany(mappedBy = "ast") 
private List<N> nutz; 

@Entity 
public class T extends UUID implements Serializable { 

@OneToMany(mappedBy = "tfs") 
private List<N> nutz; 
+0

我期望在你的情況下只有兩個約束:PK約束和UniqueConstraint(超過兩個字段)。 Hibernate的約束是什麼?你期望的約束是什麼? –

+0

然後我沒有提及其他實體。目前有1PrimaryKey(uuid)2SecondaryKey(對於ast和tofs)約束。我期望1PrimaryKey 2SecondaryKey加上1Unniqe(ast,tfs)約束。 –

+0

當然,我沒有計算外鍵約束。你確定你的表中沒有多個組合'{「ast」,「tfs」}? –

回答

0

它的工作原理,如果我設置:中

<property name="hibernate.hbm2ddl.auto" value="create-drop" /> 

代替

<property name="hibernate.hbm2ddl.auto" value="update" /> 

看來Hibernate只會在創建完整數據庫時創建constaints,而不會創建表!混亂。 related

+0

這是一個Bug,在4.2.1中修復,參見https://hibernate.atlassian.net/browse/HHH-8092 –