我有一個實體類的兩個領域,我不想是唯一的,而是作爲一個鍵本身必須是唯一的複合領域。例如,我有兩個字段(名稱和版本),對於其他記錄可以是相同的,但它們必須是唯一的。使用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. 使用宏,如何獲得結構字段的唯一名稱?
- 2. Kibana:如何獲得一個字段的唯一條目列表?
- 3. 如何在excel的單個字段中獲得唯一值
- 4. 如何使用Hibernate比較兩個不同表中的字段?
- 5. 如何獲得solr中字段唯一值的總計數
- 6. 我如何獲得一個名單的唯一一個用戶
- 7. 如何驗證兩個字段的唯一性
- 8. 如何獲得某個字段爲X的行的唯一列表?
- 9. 將兩個字段轉換爲R中的一個唯一鍵值
- 10. 如何從沒有唯一字段的兩個不同表中獲取記錄
- 11. 如何在兩個字段上創建「雙面」唯一索引?
- 12. 如何將兩個字段作爲ormlite中的一個主鍵?
- 13. 發行約Schema.xml的唯一鍵字段
- 14. 如何獲取字符鍵的唯一鍵碼
- 15. 如何獲得字段外鍵(表和字段)php mysqli
- 16. 如何獲得MongoDB中兩個字段的差異總和?
- 17. MongoDB/JS:如何獲得數組字段的所有唯一字符串值
- 18. TSQL如何獲得唯一用戶數?
- 19. 用於多個唯一字段的相同外鍵
- 20. 如何使用Hibernate獲取10個隨機唯一對象的列表?
- 21. 如何防止兩個用戶獲得相同的唯一密鑰?
- 22. JPA Hibernate的多對多非唯一鍵
- 23. 使用C#Guid作爲唯一的非主鍵字段
- 24. mysql的不是唯一的自動遞增,主鍵兩個字段
- 25. 如何使用SQLAlchemy在一次提交中切換一個唯一行的兩個字段?
- 26. 插入一個唯一的int到非主鍵字段
- 27. amcharts指定唯一鍵作爲字段
- 28. 如何獲得視頻的唯一ID
- 29. 如何獲得唯一的推送ID
- 30. 如何獲得唯一的`uid`?
您是否希望對兩列或包含兩列的表上的「主鍵」設置「唯一約束」? – 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