Validation des combinaisons de champs dans JPA 2.0/Hibernate
Lors de l'utilisation de la validation JPA 2.0/Hibernate, il est possible de rencontrer des scénarios où la validation de plusieurs champs en combinaison sont nécessaires. Par exemple, considérons un modèle avec les champs getValue1() et getValue2() :
<code class="java">public class MyModel { public Integer getValue1() { //... } public String getValue2() { //... } }</code>
Le modèle doit être considéré comme non valide si getValue1() et getValue2() sont tous deux nuls, indiquant des données non valides.
Contraintes au niveau de la classe : la solution
Pour gérer de telles validations, JPA 2.0/Hibernate fournit des contraintes au niveau de la classe. Ces contraintes opèrent sur l'instance de classe entière au lieu de propriétés individuelles. Cette approche offre une flexibilité dans la validation des champs interdépendants.
Définition de la contrainte
Définissez une contrainte au niveau de la classe nommée AddressAnnotation pour valider la combinaison de champs. Définissez @Target sur ElementType.TYPE pour appliquer cette contrainte à la classe plutôt qu'à une propriété spécifique :
<code class="java">@Constraint(validatedBy = MultiCountryAddressValidator.class) @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface AddressAnnotation { String message() default "{error.address}"; Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default { }; }</code>
Implémentation du validateur
Ensuite, créez le validateur implémentation MultiCountryAddressValidator. Cette classe recevra l'instance d'objet et effectuera la validation des champs combinés :
<code class="java">public class MultiCountryAddressValidator implements ConstraintValidator<AddressAnnotation, Address> { ... // Implement the isValid() method to define the validation logic }</code>
Dans cette implémentation, vous pouvez accéder à plusieurs champs de l'instance d'objet (Adresse dans ce cas) et appliquer les règles de validation nécessaires.
Annotation de la classe Model
Enfin, annotez votre classe MyModel avec l'AddressAnnotation :
<code class="java">@AddressAnnotation public class MyModel { ... }</code>
En utilisant des contraintes au niveau de la classe, vous pouvez valider efficacement combinaisons de champs de manière robuste et flexible en utilisant la validation Hibernate.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!