我有一個實體類的兩個領域,我不想是唯一的,而是作爲一個鍵本身必須是唯一的複合領域。例如,我有兩個字段(名稱和版本),對於其他記錄可以是相同的,但它們必須是唯一的。使用Hibernate(帶註釋)的最佳方式是什麼?我在其他領域使用Hibernate Validator,但我不確定如何使用它來驗證這兩個字段組成一個唯一的密鑰。我正在使用一個通用的實體類,它具有一個id泛型類型,可以將其替換爲組合鍵類,但我尚未得到很好的工作。如何使用Hibernate獲得兩個字段的唯一鍵?
20
A
回答
37
這將創建數據庫的唯一關鍵:
@Table(name = "MYTABLE",
uniqueConstraints = { @UniqueConstraint(columnNames = { "NAME", "VERSION" }) })
這將通過數據庫的更新被執行或者堅持。
如果您想使用Hibernate Validator強制執行此操作,您需要編寫自己的自定義驗證器。
4
我們通常會將這兩個字段封裝在標記爲@Embeddable的內部鍵類中。例如:
@Entity
public class Foo {
@EmbeddedId()
private Key key;
...
@Embeddable
public static class Key {
@Column(nullable=false)
private String name;
@Column(nullable=false)
private int version;
protected Key() {
// for hibernate
}
public Key (String name, int version) {
this.name = name;
this.version = version;
}
...
// You probably want .equals and .hashcode methods
}
}
相關問題
- 1. Hibernate的唯一性字段
- 2. 使用宏,如何獲得結構字段的唯一名稱?
- 3. Kibana:如何獲得一個字段的唯一條目列表?
- 4. 如何在excel的單個字段中獲得唯一值
- 5. 如何在NSDictionary中獲得唯一鍵?
- 6. 如何使用Hibernate比較兩個不同表中的字段?
- 7. WordJS/OfficeJS如何獲得一個段落的唯一ID
- 8. 如何獲得solr中字段唯一值的總計數
- 9. MySQLi json_encode - 如何獲得唯一的字符串鍵不是數字鍵?
- 10. 如何在NOT IN語句中使用多字段唯一鍵?
- 11. 如何獲得一個字段
- 12. 如果兩個字段都不唯一,是否可以創建一個外鍵?
- 13. ADO - 如何獲得主鍵字段
- 14. Django - 獲取唯一字段的兩個日期的總和
- 15. 我如何獲得一個名單的唯一一個用戶
- 16. Gson - 一個字段的兩個json鍵
- 17. 如何驗證兩個字段的唯一性
- 18. 獲取兩個字段值的唯一組合
- 19. 如何獲得某個字段爲X的行的唯一列表?
- 20. 如何獲得唯一的用戶名
- 21. 將兩個字段轉換爲R中的一個唯一鍵值
- 22. 如何使用perl獲得每個類別的唯一成員?
- 23. 如何從沒有唯一字段的兩個不同表中獲取記錄
- 24. 的JavaScript獲得唯一鍵值
- 25. 在休眠中使用兩個字段作爲唯一ID
- 26. Hibernate會插入兩次得到的結果唯一鍵約束違反
- 27. 比較兩個字符串以獲得唯一性百分比
- 28. 如何在兩個字段上創建「雙面」唯一索引?
- 29. 如何定義兩個字段「唯一」作爲夫婦
- 30. 如何將兩個字段作爲ormlite中的一個主鍵?
您是否希望對兩列或包含兩列的表上的「主鍵」設置「唯一約束」? – 2009-06-03 19:54:54
我想在兩列上有一個唯一的約束。例如,名稱和版本的組合必須是唯一的。所以我可以在表中記錄#1(name = abc/version = 1)和記錄#2(name = abc/version = 2)中的兩條記錄,但是表中沒有兩條記錄,記錄#1 = abc/version = 1)和記錄#2(name = abc/version = 1)。 – 2009-06-08 23:22:03