2012-07-20 104 views
0

在我的Spring/hibernate項目中,我使用uniqueConstraints = {@UniqueConstraint(columnNames={"ID_A", "ID_B"})}來驗證表中列的唯一組合。當我只有兩列時,這工作正常。@UniqueConstraint超過兩列

但是,當我想要添加第三列ID_C約束它不再起作用。

  1. @UniqueConstraint只允許兩列嗎?
  2. 如果是,那麼我將如何驗證超過兩列的唯一組合?

謝謝你的幫助, /d

編輯:我的意思是「它不再起作用」是,當我添加新條目表中沒有拋出異常。有兩列它會拋出一個ConstraintViolationException

+0

定義「不起作用」。怎麼了? – 2012-07-20 12:33:38

+1

如果您查看數據庫表,您是否看到創建的約束?它是否創建了3列或少於3列? – 2012-07-20 12:42:21

+0

您能否提供更多詳細信息?像dto/mapping類一樣。 – 2012-07-20 12:50:00

回答

2

單獨向實體添加UniqueConstraint不執行任何驗證。作爲鏈接文檔中表示,它給出了在數據庫模式生成中使用的指令:

指定的唯一約束是要被包括在所產生的 DDL爲伯或仲表。

現在你還有兩個選擇:

  1. 讓Hibernate生成的數據庫架構
  2. 刪除舊約束並通過使用SQL作爲通常會添加新的。
+0

我已經有休眠生成數據庫模式,但你的第二個選項讓我思考。我有一個mysqldump,我正在加載數據,它不包含新的約束,這意味着它刪除了休眠創建的表,並重新創建沒有約束的舊錶。另外,感謝UniqueConstraint的澄清。/d – dlinx90 2012-07-20 19:54:00