Maison  >  Article  >  Java  >  Comment valider plusieurs champs en combinaison dans JPA 2.0/Hibernate ?

Comment valider plusieurs champs en combinaison dans JPA 2.0/Hibernate ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-05 22:30:02275parcourir

How to Validate Multiple Fields in Combination in JPA 2.0/Hibernate?

Validation de plusieurs champs en combinaison

Dans JPA 2.0/Hibernate, de simples annotations @NotNull sur plusieurs champs ne valideront que des champs individuels. Pour valider une combinaison de champs, envisagez d'utiliser des contraintes au niveau de la classe.

Comme décrit dans l'aperçu de la validation du bean, partie II : les contraintes personnalisées, les contraintes au niveau de la classe permettent d'appliquer la logique de validation à plusieurs propriétés au sein d'un objet. . Ceci est particulièrement utile pour les règles de validation complexes qui dépendent de plusieurs champs.

Implémentation

Pour implémenter des contraintes au niveau de la classe, définissez une annotation (@AddressAnnotation) et une contrainte validateur (MultiCountryAddressValidator). L'annotation précise la règle de validation à appliquer, tandis que le validateur implémente la logique de validation de la combinaison de champs.

@AddressAnnotation 
public class Address {
    @NotNull @Max(50) private String street1;
    @Max(50) private String street2;
    @Max(10) @NotNull private String zipCode;
    @Max(20) @NotNull String city;
    @NotNull private Country country;
}

public class MultiCountryAddressValidator implements ConstraintValidator<AddressAnnotation, Address> {
    public boolean isValid(Address object, ConstraintValidatorContext context) {
        // Validate zipcode and city depending on the country
        // ...
    }
}

Dans le validateur, l'instance d'objet est passée à la méthode isValid, permettant l'accès à tous champs à des fins de validation. Le validateur peut vérifier les interdépendances entre les champs, comme la corrélation entre le code postal et la ville.

Utilisation

Une fois définie, la contrainte au niveau de la classe peut être appliquée à la classe modèle en utilisant l'annotation :

@AddressAnnotation
public class MyModel {
    public Integer getValue1() {
        //...
    }
    public String getValue2() {
        //...
    }
}

Cette annotation indique que MultiCountryAddressValidator doit être utilisé pour valider la combinaison de getValue1() et getValue2(). Si les deux champs sont nuls, le modèle est considéré comme invalide. Sinon, le modèle est valable.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn