75 votes

Plusieurs contraintes uniques dans JPA

Existe-t-il un moyen de spécifier à l'aide de JPA qu'il doit exister plusieurs contraintes uniques sur différents ensembles de colonnes?

 @Entity
@Table(name="person", 
       uniqueConstraints=@UniqueConstraint(columnNames={"code", "uid"}))
public class Person {
    // Unique on code and uid
    public String code;
    public String uid;

    // Unique on username
    public String username;

    public String name;
    public String email;
}
 

J'ai vu une annotation spécifique à l'hibernation, mais j'essaie d'éviter les solutions spécifiques au fournisseur, car nous sommes toujours en train de décider entre l'hibernation et le datanucleus.

118voto

Bozho Points 273663

Le @Table attribut de uniqueConstraints accepte en réalité un tableau de ces derniers . Votre exemple est juste un raccourci pour un tableau avec un seul élément. Sinon, cela ressemblerait à:

 @Table(name="person",  uniqueConstraints={
   @UniqueConstraint(columnNames={"code", "uid"}),
   @UniqueConstraint(columnNames={"anotherField", "uid"})
})
 

Chaque fois que la contrainte unique est basée sur un seul champ, vous pouvez utiliser @Column(unique=true) sur cette colonne.

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: