【发布时间】:2011-05-31 13:47:56
【问题描述】:
如何在休眠 POJO 上实现我的独特约束?假设数据库不包含任何内容。
我在@Column() 注释中看到了唯一属性,但我无法让它工作?
如果我想将此约束应用于多个列怎么办?
【问题讨论】:
-
它的
C在@Column而不是c!!!
标签: java hibernate unique unique-constraint
如何在休眠 POJO 上实现我的独特约束?假设数据库不包含任何内容。
我在@Column() 注释中看到了唯一属性,但我无法让它工作?
如果我想将此约束应用于多个列怎么办?
【问题讨论】:
C 在 @Column 而不是 c !!!
标签: java hibernate unique unique-constraint
您可以在类中使用 @Table(uniqueConstraints = ...) 注释声明唯一约束
@Entity
@Table(uniqueConstraints=
@UniqueConstraint(columnNames = {"surname", "name"}))
public class SomeEntity {
...
}
【讨论】:
基本上,如果没有数据库支持,您将无法实现唯一约束。
@Column 的@UniqueConstraint 和unique 属性是模式生成工具生成相应约束的指令,它们本身不实现约束。
您可以在插入新实体之前进行某种手动检查,但在这种情况下,您应该注意并发事务可能出现的问题。
因此在数据库中应用约束是首选。
【讨论】:
在 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 注释中声明它是您唯一的选择。
【讨论】: