在Hibernate JPA2上使用唯一约束

Fer*_*deh 24 java hibernate unique unique-constraint

如何在hibernate POJO上实现我的独特约束?假设数据库不包含任何数据库.

我已经看到了@Column()注释中的唯一属性,但我无法让它工作?
如果我想将此约束应用于多个列,该怎么办?

Hon*_*ons 45

您可以使用@Table(uniqueConstraints = ...)类中的注释声明唯一约束

@Entity
@Table(uniqueConstraints=
           @UniqueConstraint(columnNames = {"surname", "name"})) 
public class SomeEntity {
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 假设id已经是主键,这个例子是错误的.unique(id,name)弱于唯一(id),弱于unique(name).一个更好的例子可能是唯一的(姓名,姓氏). (2认同)

axt*_*avt 33

基本上,没有数据库支持,您无法实现唯一约束.

@UniqueConstraintunique属性@Column是用于生成相应约束的模式生成工具的指令,它们本身不实现约束.

您可以在插入新实体之前进行某种手动检查,但在这种情况下,您应该了解并发事务可能存在的问题.

因此,在数据库中应用约束是首选.


wil*_*824 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;
}
Run Code Online (Sandbox Code Playgroud)

恕我直言,更好的是将唯一约束直接分配给属性而不是在表的开始时.

但是,如果需要声明复合唯一键,则在@table注释中声明它是唯一的选择.

  • @StephanSchielke这为每列创建一个单独的唯一约束.要在多个字段上创建唯一约束,您需要使用Hons的方法. (13认同)