我有一个Java bean。现在,我想确保这个域是唯一的。
我正在使用以下代码:
@UniqueConstraint(columnNames={"username"})
public String username;
但是我得到了一些错误:
@UniqueConstraint is dissallowed for this location
使用唯一约束的正确方法是什么?
注意:我使用的是play框架。
我有一个Java bean。现在,我想确保这个域是唯一的。
我正在使用以下代码:
@UniqueConstraint(columnNames={"username"})
public String username;
但是我得到了一些错误:
@UniqueConstraint is dissallowed for this location
使用唯一约束的正确方法是什么?
注意:我使用的是play框架。
当前回答
length属性的值必须大于或等于name attribute length,否则将抛出错误。
作品
@Column(name = "typ e", length = 4, unique = true)
private String type;
不工作,类型。长度:4 != Length属性:3
@Column(name = "type", length = 3, unique = true)
private String type;
其他回答
定义列约束
当唯一约束仅基于一个字段时,我们可以在该列上使用@Column(unique=true)。
让我们在personNumber字段上定义一个唯一的约束:
@Column(unique=true)
private Long personNumber;
当我们执行模式创建过程时,我们可以从日志中验证它:
[main] DEBUG org.hibernate.SQL -
alter table Person add constraint UK_d44q5lfa9xx370jv2k7tsgsqt unique (personNumber)
定义唯一约束
JPA通过@UniqueConstraint注释帮助我们实现这一点。我们在uniqueConstraints属性下的@Table注释中这样做。让我们记住指定列的名称:
@Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "personNumber", "isActive" }) })
我们可以在模式生成后验证它:
[main] DEBUG org.hibernate.SQL -
alter table Person add constraint UK5e0bv5arhh7jjhsls27bmqp4a unique (personNumber, isActive)
您可以在类级别使用@UniqueConstraint,用于表中的组合主键。例如:
@Entity
@Table(name = "PRODUCT_ATTRIBUTE", uniqueConstraints = {
@UniqueConstraint(columnNames = {"PRODUCT_ID"}) })
public class ProductAttribute{}
使用@UniqueConstraint时要注意:
在某些情况下(当使用MySql时),我们必须通过添加@Column(name="product_id", length = 6)来提供唯一约束中使用的列的长度,因为默认情况下Hibernate将创建最大大小的列(默认行为),这在MySql中创建唯一约束时产生一个错误(指定的键太长;最大密钥长度为1000字节)
我目前也在使用带有hibernate和JPA 2.0注释的play框架,这个模型没有问题
@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames = {"id_1" , "id_2"})})
public class class_name {
@Id
@GeneratedValue
public Long id;
@NotNull
public Long id_1;
@NotNull
public Long id_2;
}
希望有帮助。
您可以在类级别使用以下语法
@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"username"})})
public class SomeEntity {
@Column(name = "username")
public String username;
}