驗證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