我有一个Java bean。现在,我想确保这个域是唯一的。

我正在使用以下代码:

@UniqueConstraint(columnNames={"username"})
public String username;

但是我得到了一些错误:

@UniqueConstraint is dissallowed for this location

使用唯一约束的正确方法是什么?

注意:我使用的是play框架。


当前回答

   @Entity @Table(name = "stock", catalog = "mkyongdb",
   uniqueConstraints = @UniqueConstraint(columnNames =
   "STOCK_NAME"),@UniqueConstraint(columnNames = "STOCK_CODE") }) public
   class Stock implements java.io.Serializable {

   }

仅用于创建组合键的唯一约束,该组合键将是唯一的。它将表表示为主键组合为唯一键。

其他回答

使用@UniqueConstraint时要注意:

在某些情况下(当使用MySql时),我们必须通过添加@Column(name="product_id", length = 6)来提供唯一约束中使用的列的长度,因为默认情况下Hibernate将创建最大大小的列(默认行为),这在MySql中创建唯一约束时产生一个错误(指定的键太长;最大密钥长度为1000字节)

您可以在类级别使用@UniqueConstraint,用于表中的组合主键。例如:

 @Entity
 @Table(name = "PRODUCT_ATTRIBUTE", uniqueConstraints = {
       @UniqueConstraint(columnNames = {"PRODUCT_ID"}) })
public class ProductAttribute{}

为了确保字段值是唯一的,您可以编写

@Column(unique=true)
String username;

@UniqueConstraint注释用于在表级注释多个惟一键,这就是为什么在将其应用到字段时出现错误的原因。

引用(JPA TopLink):

@UniqueConstraint @ column

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的组合值作为唯一的约束

您可以在类级别使用以下语法

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"username"})})
public class SomeEntity {
    @Column(name = "username")
    public String username;
}