web-dev-qa-db-fra.com

Annotation @UniqueConstraint en Java

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

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

Mais je reçois une erreur:

@UniqueConstraint is dissallowed for this location

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

Note: / J'utilise un cadre de jeu.

134
xyz

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

@Column(unique=true)
String username;

L'annotation @UniqueConstraint permet d'annoter plusieurs clés uniques au niveau de la table. C'est pourquoi vous obtenez une erreur lors de son application à un champ.

Références (JPA TopLink):

343
mdma

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 String username;
}
90
Developer

J'utilise également le cadre de jeu avec les annotations Hibernate et JPA 2.0 et ce modèle fonctionne sans problème. 

@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é.

32
FrancescoM

Remarque: Dans Kotlin, la syntaxe de déclaration des 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)

Remarque: À partir de Kotlin 1.2, il est possible d'utiliser la syntaxe [...] afin que le code devienne beaucoup plus simple.

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

Way1:

@Entity

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

- Ici, Colonne1 et Colonne2 agissent séparément comme des contraintes uniques . Ex: si jamais la valeur de column1 ou column2 correspond, vous obtiendrez une erreur UNIQUE_CONSTRAINT.

Way2:

@Entity

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

- Ici, les valeurs combinées de column1 et de column2 agissent comme des contraintes uniques.

3
Manjunath H M
   @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.Il représentera la table comme clé primaire combinée comme unique 

3
CodamRanjan

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

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

classe publique ProductAttribute {}

2
hashem yousefi

Les annotations uniques doivent être placées juste au-dessus de la déclaration d'attribut . UniqueContraints est placé 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?, )

0
R Lu