200 votes

Annotation @UniqueConstraint en Java

J'ai un haricot Java. Maintenant, je veux être sûr que le champ soit 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 les contraintes uniques ?

Note : J'utilise le cadre de jeu.

19 votes

"Mais je reçois une erreur." Toujours précisez dans la question quelle erreur vous obtenez. Vous disposez d'informations pertinentes qui pourraient très bien nous aider à résoudre votre problème - ne les gardez pas pour vous.

0 votes

Serait-il possible d'utiliser l'annotation @id ?

0 votes

Merveilleux commentaire Jon Skeet, il a fait ma journée !

477voto

mdma Points 33973

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

@Column(unique=true)
String username;

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

Références (JPA TopLink) :

26 votes

Il est important de noter que cela ne fonctionnera que si vous laissez JPA créer vos tables.

131voto

Debu Points 113

Vous pouvez l'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;
}

46voto

user2858970 Points 116

J'utilise également le play framework avec hibernate et l'annotation 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 vous a aidé.

4 votes

J'espère que vous ne codez pas avec ces champs dans la vie réelle ;)

27voto

GlenPeterson Points 285

Note : En 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 : Depuis la version 1.2 de Kotlin, il est possible d'utiliser l'attribut [...] syntaxe pour 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)

17voto

Manjunath H M Points 432

Way1 :

@Entity

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

-- Ici, Column1 et Column2 agissent séparément comme des contraintes uniques. Ex : si à un moment donné, la valeur de la colonne 1 ou de la colonne 2 correspond, vous obtiendrez une erreur UNIQUE_CONSTRAINT.

Way2 :

@Entity

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

-- Ici, les valeurs combinées de la colonne 1 et de la colonne 2 agissent comme des contraintes uniques.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X