我有一個MySQL表來存放標記(即像堆棧溢出時使用的那些表)。它只有一個id(pk)和一個標籤列來保存標籤本身。休眠 - 被忽略的唯一列約束
我的標記實體的註釋的get方法如下所示。
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public int getId() {
return this.id;
}
@Column(name = "tag", unique = true, nullable = false)
public String getTag() {
return this.tag;
}
我在標籤上使用了一個唯一的列約束,因爲對於給定的標籤不應該有多於一行。但是,Hibernate似乎忽略了這一點,即我可以多次保存完全相同的標記,它只是創建一個新行而不是拋出異常。
我錯過了什麼或應該工作嗎?
謝謝你的回答。順便說一下,這不是那麼荒謬嗎?! – zakmck 2013-06-05 17:30:48
不,不是。數據庫確實很快就會驗證該實體是否唯一。 ORM不能這麼快。這就是爲什麼這有道理。 – 2013-06-06 08:06:01
我的意思是,我使用該註釋並不可笑,它不會在數據庫中創建對應的唯一約束?這是我最初瞭解它的行爲,雖然我做了一些實驗,並且它似乎只在我使用某些數據庫(如HSQL)時才反映模式的'unique = true',同樣的代碼會產生一個MySQL約束我切換數據庫配置。 – zakmck 2013-06-11 13:14:36