24

如何在休眠 POJO 上实现我的独特约束?假设数据库不包含任何内容。

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

4

3 回答 3

45

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

@Entity
@Table(uniqueConstraints=
           @UniqueConstraint(columnNames = {"surname", "name"})) 
public class SomeEntity {
    ...
}
于 2010-12-28T12:49:21.300 回答
34

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

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

您可以在插入新实体之前进行某种手动检查,但在这种情况下,您应该注意并发事务可能出现的问题。

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

于 2010-12-28T13:45:04.897 回答
20

在 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注释中声明它是您唯一的选择。

于 2011-04-15T13:30:12.407 回答