我有一个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框架。
当前回答
为了确保字段值是唯一的,您可以编写
@Column(unique=true)
String username;
@UniqueConstraint注释用于在表级注释多个惟一键,这就是为什么在将其应用到字段时出现错误的原因。
引用(JPA TopLink):
@UniqueConstraint @ column
其他回答
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;
Way1:
@Entity
@Table(name = "table_name",
uniqueConstraints={
@UniqueConstraint(columnNames = "column1"),
@UniqueConstraint(columnNames = "column2")
}
)
->这里columnn1和Column2分别作为唯一的约束。 例如:如果任何时候columnn1或column2的值匹配,那么你将得到UNIQUE_CONSTRAINT Error。
Way2:
@Entity
@Table(name = "table_name",
uniqueConstraints={@UniqueConstraint(columnNames ={"column1","column2"})})
->在这里,columnn1和column2的组合值作为唯一的约束
定义列约束
当唯一约束仅基于一个字段时,我们可以在该列上使用@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)
@Entity @Table(name = "stock", catalog = "mkyongdb",
uniqueConstraints = @UniqueConstraint(columnNames =
"STOCK_NAME"),@UniqueConstraint(columnNames = "STOCK_CODE") }) public
class Stock implements java.io.Serializable {
}
仅用于创建组合键的唯一约束,该组合键将是唯一的。它将表表示为主键组合为唯一键。
对我来说,添加@Column(name = "column_name", length = 11, unique = true)起作用了