Java中的@UniqueConstraint注释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的@UniqueConstraint注释相关的知识,希望对你有一定的参考价值。

我有一个Java bean。现在,我想确保该字段应该是唯一的。我使用以下代码:

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

但是我收到了一些错误:

@UniqueConstraint is dissallowed for this location

什么是使用独特约束的正确方法?

注意:我正在使用play框架。

答案

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

@Column(unique=true)
String username;

@UniqueConstraint注释用于在表级别注释多个唯一键,这就是将其应用于字段时出错的原因。

参考文献(JPA TopLink):

另一答案

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

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

另一答案

我目前正在使用play框架和hibernate以及JPA 2.0注释,这个模型没有问题

@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;


希望它有所帮助。

另一答案

注意:在Kotlin中,在注释中声明数组的语法使用arrayOf(...)而不是...

@Entity
@Table(uniqueConstraints=arrayOf(UniqueConstraint(columnNames=arrayOf("book", "chapter_number"))))
class Chapter(@ManyToOne var book:Book,
              @Column var chapterNumber:Int)

注意:从Kotlin 1.2开始,可以使用[...]语法,因此代码变得更加简单

@Entity
@Table(uniqueConstraints=[UniqueConstraint(columnNames=["book", "chapter_number"])])
class Chapter(@ManyToOne var book:Book,
              @Column var chapterNumber:Int)
另一答案

方式1:

@Entity

@Table(name = "table_name", uniqueConstraints=@UniqueConstraint(columnNames = "column1"),@UniqueConstraint(columnNames = "column2"))

- 这里Column1和Column2分别作为唯一约束。例如:如果任何时候column1或column2值的值匹配,那么你将得到UNIQUE_CONSTRAINT错误。

维阿:

@Entity

@Table(name = "table_name", uniqueConstraints=@UniqueConstraint(columnNames ="column1","column2"))

- 此处,column1和column2组合值都充当唯一约束

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

   

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

另一答案

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

 @Entity
 @Table(name = "PRODUCT_ATTRIBUTE", uniqueConstraints = 
       @UniqueConstraint(columnNames = "PRODUCT_ID") )

公共类ProductAttribute

另一答案

唯一注释应放在属性声明的正上方。 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?,
)

以上是关于Java中的@UniqueConstraint注释的主要内容,如果未能解决你的问题,请参考以下文章

@UniqueConstraint 和 @Column(unique = true) 在休眠注释中

Java中的@UniqueConstraint注解

Symfony UniqueEntity vs UniqueConstraint vs unique=true

如何在hbm中做多列UniqueConstraint?

Heroku spring-jpa UniqueConstraint

kotlin:注释中数组的一些问题