web-dev-qa-db-fra.com

Plusieurs contraintes uniques dans JPA

Existe-t-il un moyen de spécifier à l'aide de JPA qu'il doit y avoir 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 aux fournisseurs, car nous décidons toujours entre l'hibernation et le datanucleus.

75
Jacob

L'attribut de @TableuniqueConstraints accepte en fait un tableau de ceux-ci. Votre exemple n'est qu'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.

121
Bozho