如何在hibernate POJO上实现我的唯一约束?假设数据库不包含任何数据库。
我已经看到了@Column()
注释中的唯一属性,但我无法使其工作?
如果我想将此约束应用于多个列,该怎么办?
答案 0 :(得分:43)
您可以使用班级中的@Table(uniqueConstraints = ...)
注释声明唯一约束
@Entity
@Table(uniqueConstraints=
@UniqueConstraint(columnNames = {"surname", "name"}))
public class SomeEntity {
...
}
答案 1 :(得分:33)
基本上,没有数据库支持,您无法实现唯一约束。
@UniqueConstraint
的{p {1}}和unique
属性是用于生成相应约束的模式生成工具的说明,它们本身不实现约束。
您可以在插入新实体之前进行某种手动检查,但在这种情况下,您应该了解并发事务可能存在的问题。
因此,在数据库中应用约束是首选。
答案 2 :(得分:19)
在JPA2中,您可以将Unique约束直接添加到字段:
@Entity
@Table(name="PERSON_TABLE")
public class Person{
@Id
@Column(name = "UUID")
private String id;
@Column(name = "SOCIALSECURITY", unique=true)
private String socialSecurityNumber;
@Column(name = "LOGINID", unique=true)
private String loginId;
}
恕我直言,最好将唯一约束直接分配给属性,而不是在表格的开始处。
如果您需要声明复合唯一键,那么在@table
注释中声明它是您唯一的选择。