Validando combinações de campos no JPA 2.0/Hibernate
Ao usar a validação JPA 2.0/Hibernate, é possível encontrar cenários onde a validação de vários campos em combinação são necessários. Por exemplo, considere um modelo com campos getValue1() e getValue2():
public class MyModel {
public Integer getValue1() {
//...
}
public String getValue2() {
//...
}
}
O modelo deve ser considerado inválido se getValue1() e getValue2() forem nulos, indicando dados inválidos.
Restrições de nível de classe: a solução
Para lidar com tais validações, JPA 2.0/Hibernate fornece restrições em nível de classe. Essas restrições operam em toda a instância da classe, em vez de em propriedades individuais. Essa abordagem fornece flexibilidade na validação de campos inter-relacionados.
Definindo a restrição
Defina uma restrição em nível de classe chamada AddressAnnotation para validar a combinação de campos. Defina @Target como ElementType.TYPE para aplicar esta restrição à classe em vez de uma propriedade específica:
@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 { };
}
Implementando o validador
Em seguida, crie a implementação do validador MultiCountryAddressValidator. Esta classe receberá a instância do objeto e realizará a validação dos campos combinados:
public class MultiCountryAddressValidator implements ConstraintValidator {
...
// Implement the isValid() method to define the validation logic
}
Nesta implementação, você pode acessar vários campos da instância do objeto (Endereço neste caso) e aplicar as regras de validação necessárias.
Anotação da classe do modelo
Finalmente, anote sua classe MyModel com AddressAnnotation:
@AddressAnnotation
public class MyModel {
...
}
Ao utilizar restrições em nível de classe, você pode validar efetivamente combinações de campos de maneira robusta e flexível usando a validação do Hibernate.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3