Bonjour,
Comment indiquer à Hibernate que deux champs d'une table ne peuvent pas être null en même temps (cas de gestion d'une double référence) ?
Merci d'avance.
A+
Bonjour,
Comment indiquer à Hibernate que deux champs d'une table ne peuvent pas être null en même temps (cas de gestion d'une double référence) ?
Merci d'avance.
A+
Via Hibernate Validator c'est faisable en implémentant l'interface ConstraintValidator d'hibernate.
Basiquement, une annotation spécifique:
Le validateur en lui-même:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 @Target({TYPE, ANNOTATION_TYPE}) @Retention(RUNTIME) @Constraint(validatedBy = NonNulSiAutreValeurValidator.class) @Documented public @interface NonNulSiAutreValeur { String champs1(); String champs2(); @Target({TYPE, ANNOTATION_TYPE}) @Retention(RUNTIME) @Documented @interface List { NonNulSiAutreValeur [] value(); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public class NonNulSiAutreValeurValidator implements ConstraintValidator<NonNulSiAutreValeur , Object> { public boolean isValid(final Object value, final ConstraintValidatorContext ctx) { // vérification du premier et du second champs } }
Bonjour,
Même si on peut le faire au niveau Hibernate, je conseille vivement de mettre cette contrainte au niveau du MPD pour garder une certaine cohérence, car il faut partir de l'hypothèse qu'une autre application accède un jour en modification sur la table et ne respecte pas la contrainte.
Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."
MPD = Modèle Physique De données, en gros je voulais dire qu'il faut centraliser la contrainte, de sorte que tout client de la base ayant des droits de modifications soit soumis à la contrainte.
Cela n'empêche de la remonter également au niveau applicatif , afin d'éviter de se prendre un rejet de la base. Donc à 2 niveaux pour être mieux précis.
Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager