Annotation @UniqueConstraint en Java

J’ai un bean Java. Maintenant, je veux être sûr que le champ doit être unique. J’utilise le code suivant:

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

Mais j’obtiens des erreurs:

 @UniqueConstraint is dissallowed for this location 

Quelle est la bonne façon d’utiliser des contraintes uniques?

Note: J’utilise un framework de lecture.

Pour vous assurer qu’une valeur de champ est unique, vous pouvez écrire

 @Column(unique=true) Ssortingng username; 

L’annotation @UniqueConstraint sert à annoter plusieurs clés uniques au niveau de la table. C’est pourquoi vous obtenez une erreur lorsque vous l’appliquez à un champ.

Références (JPA TopLink):

  • @Contrainte unique
  • @Colonne

Vous pouvez utiliser au niveau de la classe avec la syntaxe suivante

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

J’utilise aussi le framework de jeu avec les annotations Hibernate et JPA 2.0 et ce modèle fonctionne sans problèmes

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

J’espère que ça a aidé.

Note: Dans Kotlin, la syntaxe pour déclarer les tableaux dans les annotations utilise arrayOf(...) au lieu de {...}

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

Note: A partir de Kotlin 1.2, il est possible d’utiliser la syntaxe [...] pour simplifier le code

 @Entity @Table(uniqueConstraints=[UniqueConstraint(columnNames=["book", "chapter_number"])]) class Chapter(@ManyToOne var book:Book, @Column var chapterNumber:Int) 
  @Entity @Table(name = "stock", catalog = "mkyongdb", uniqueConstraints = @UniqueConstraint(columnNames = "STOCK_NAME"),@UniqueConstraint(columnNames = "STOCK_CODE") }) public class Stock implements java.io.Serializable { } 

Contraintes uniques utilisées uniquement pour créer une clé composite, qui sera unique.Elle représentera la table en tant que clé primaire combinée comme unique.

Vous pouvez utiliser @UniqueConstraint au niveau de la classe, pour une clé primaire combinée dans une table. par exemple:

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

classe publique ProductAtsortingbute {}

Way1:

 @Entity @Table(name = "table_name", uniqueConstraints={@UniqueConstraint(columnNames = "column1"),@UniqueConstraint(columnNames = "column2")}) -- Here both Column1 and Column2 acts as unique constraints separately. Ex : if any time either the value of column1 or column2 value matches then you will get UNIQUE_CONSTRAINT Error. 

Way2:

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

– Ici, les valeurs combinées column1 et column2 agissent comme des contraintes uniques

L’annotation unique doit être placée juste au-dessus de la déclaration d’atsortingbut. UniqueContraints entre dans l’annotation @Table au-dessus de la déclaration de classe de données. Voir ci-dessous:

@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?, )