À moins que vous acquérir un verrou sur une table entière, c'est fondamentalement pas possible de vérifier l'unicité à l'aide d'une requête SQL (toute transaction simultanée pourrait modifier les données après une vérification manuelle mais avant la validation de la poursuite de la transaction). En d'autres termes, il n'est pas possible de mettre en œuvre un unique valide vérification à la Java niveau et donc de fournir une validation de la mise en œuvre. Le seul moyen fiable de vérifier l'unicité est alors que la validation de la transaction.
Le BV spec résume comme ceci:
Question: doit-on ajouter @Unique qui
serait carte à @Column(unique=true)?
@Unique ne peut pas être testée à la Java
niveau de manière fiable, mais pourrait générer un
base de données unique contrainte de génération.
@Unique n'est pas une partie de la BV spec
aujourd'hui.
Ainsi, alors que je suis d'accord qu'il serait agréable d'avoir unique (et non nul), les violations de contrainte enveloppé dans un Bean Validation exception, ce n'est pas le cas actuellement.
Références