Comment puis-je implémenter mes contraintes uniques sur les POJO d'hibernation? en supposant que la base de données n'en contient pas.
J'ai vu l'attribut unique dans l'annotation @Column()
mais je n'ai pas pu le faire fonctionner?
Et si je veux appliquer cette contrainte à plusieurs colonnes?
Fondamentalement, vous ne pouvez pas implémenter de contrainte unique sans prise en charge de base de données.
@UniqueConstraint
et unique
attribut de @Column
sont des instructions pour que l'outil de génération de schéma génère les contraintes correspondantes, ils n'implémentent pas les contraintes lui-même.
Vous pouvez effectuer une sorte de vérification manuelle avant d'insérer de nouvelles entités, mais dans ce cas, vous devez être conscient des problèmes possibles avec les transactions simultanées.
Par conséquent, l'application de contraintes dans la base de données est le choix préféré.
Vous pouvez déclarer des contraintes uniques à l'aide de l'annotation @Table(uniqueConstraints = ...)
dans votre classe
@Entity
@Table(uniqueConstraints=
@UniqueConstraint(columnNames = {"surname", "name"}))
public class SomeEntity {
...
}
Dans JPA2, vous pouvez ajouter la contrainte Unique directement au champ:
@Entity
@Table(name="PERSON_TABLE")
public class Person{
@Id
@Column(name = "UUID")
private String id;
@Column(name = "SOCIALSECURITY", unique=true)
private String socialSecurityNumber;
@Column(name = "LOGINID", unique=true)
private String loginId;
}
À mon humble avis, il vaut beaucoup mieux attribuer la contrainte unique directement aux attributs qu'au début de la table.
Si vous devez cependant déclarer une clé unique composite, la déclarer dans le @table
l'annotation est votre seule option.