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

我正在使用以下代码:

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

但是我得到了一些错误:

@UniqueConstraint is dissallowed for this location

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

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


当前回答

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

其他回答

我目前也在使用带有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;

}

希望有帮助。

对我来说,添加@Column(name = "column_name", length = 11, unique = true)起作用了

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

唯一注释应该放在属性声明的正上方。 UniqueContraints进入数据类声明上面的@Table注释。见下文:

@Entity
@Table(uniqueConstraints= arrayOf(UniqueConstraint(columnNames = arrayOf("col_1", "col_2"))))
data class Action(
        @Id @GeneratedValue @Column(unique = true)
        val id: Long?,
        val col_1: Long?,
        val col_2: Long?,
)

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

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