我有一个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框架。
当前回答
@UniqueConstraint此注释用于注释表级别上由逗号分隔的单个或多个惟一键,这就是为什么您会得到一个错误。 只有让JPA创建您的表,它才会工作
例子
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder(builderClassName = "Builder", toBuilder = true)
@Entity
@Table(name = "users", uniqueConstraints = @UniqueConstraint(columnNames = {"person_id", "company_id"}))
public class AppUser extends BaseEntity {
@Column(name = "person_id")
private Long personId;
@ManyToOne
@JoinColumn(name = "company_id")
private Company company;
}
https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/UniqueConstraint.html
另一方面,为了确保字段值是唯一的,您可以编写
@Column(unique=true)
String username;
其他回答
为了确保字段值是唯一的,您可以编写
@Column(unique=true)
String username;
@UniqueConstraint注释用于在表级注释多个惟一键,这就是为什么在将其应用到字段时出现错误的原因。
引用(JPA TopLink):
@UniqueConstraint @ column
使用@UniqueConstraint时要注意:
在某些情况下(当使用MySql时),我们必须通过添加@Column(name="product_id", length = 6)来提供唯一约束中使用的列的长度,因为默认情况下Hibernate将创建最大大小的列(默认行为),这在MySql中创建唯一约束时产生一个错误(指定的键太长;最大密钥长度为1000字节)
@UniqueConstraint此注释用于注释表级别上由逗号分隔的单个或多个惟一键,这就是为什么您会得到一个错误。 只有让JPA创建您的表,它才会工作
例子
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder(builderClassName = "Builder", toBuilder = true)
@Entity
@Table(name = "users", uniqueConstraints = @UniqueConstraint(columnNames = {"person_id", "company_id"}))
public class AppUser extends BaseEntity {
@Column(name = "person_id")
private Long personId;
@ManyToOne
@JoinColumn(name = "company_id")
private Company company;
}
https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/UniqueConstraint.html
另一方面,为了确保字段值是唯一的,您可以编写
@Column(unique=true)
String username;
您可以在类级别使用以下语法
@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"username"})})
public class SomeEntity {
@Column(name = "username")
public String username;
}
@Entity @Table(name = "stock", catalog = "mkyongdb",
uniqueConstraints = @UniqueConstraint(columnNames =
"STOCK_NAME"),@UniqueConstraint(columnNames = "STOCK_CODE") }) public
class Stock implements java.io.Serializable {
}
仅用于创建组合键的唯一约束,该组合键将是唯一的。它将表表示为主键组合为唯一键。