我有一个实体类的两个领域,我不想是唯一的,而是作为一个键本身必须是唯一的复合领域。例如,我有两个字段(名称和版本),对于其他记录可以是相同的,但它们必须是唯一的。使用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