验证 JPA 2.0/Hibernate 中的字段组合
使用 JPA 2.0/Hibernate 验证时,可能会遇到以下情况:多个字段的组合是必要的。例如,考虑一个具有字段 getValue1() 和 getValue2() 的模型:
public class MyModel {
public Integer getValue1() {
//...
}
public String getValue2() {
//...
}
}
如果 getValue1() 和 getValue2() 都为 null,则模型应被视为无效,表示数据无效。
类级约束:解决方案
为了处理此类验证,JPA 2.0/Hibernate 提供了类级别约束。这些约束作用于整个类实例而不是单个属性。这种方法为验证相互关联的字段提供了灵活性。
定义约束
定义一个名为 AddressAnnotation 的类级约束来验证字段的组合。将 @Target 设置为 ElementType.TYPE 以将此约束应用于类而不是特定属性:
@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 { };
}
实现验证器
接下来,创建验证器实现 MultiCountryAddressValidator。该类将接收对象实例并执行组合字段验证:
public class MultiCountryAddressValidator implements ConstraintValidator {
...
// Implement the isValid() method to define the validation logic
}
在此实现中,您可以访问对象实例的多个字段(在本例中为地址)并应用必要的验证规则。
注释模型类
最后,使用 AddressAnnotation 注释您的 MyModel 类:
@AddressAnnotation
public class MyModel {
...
}
通过利用类级约束,您可以使用 Hibernate 验证以稳健且灵活的方式有效地验证字段组合。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3