在JPA 2.0/Hibernate 中驗證欄位組合
使用JPA 2.0/Hibernate 驗證時,可能會遇到以下情況:多個字段的組合是必要的。例如,考慮一個具有欄位 getValue1() 和 getValue2() 的模型:
<code class="java">public class MyModel { public Integer getValue1() { //... } public String getValue2() { //... } }</code>
如果 getValue1() 和 getValue2() 都為 null,表示資料無效,則模型應視為無效。
類別級限制:解
為了處理此類驗證,JPA 2.0/Hibernate 提供了類別層級限制。這些約束作用於整個類別實例而不是單一屬性。這種方法為驗證相互關聯的欄位提供了靈活性。
定義限制
定義一個名為 AddressAnnotation 的類別級限制來驗證欄位的組合。將@Target 設為ElementType.TYPE 以將此約束應用於類別而不是特定屬性:
<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>
實作驗證器
接下來,建立驗證器實現多國家地址驗證器。此類別將接收物件實例並執行組合欄位驗證:
<code class="java">public class MultiCountryAddressValidator implements ConstraintValidator<AddressAnnotation, Address> { ... // Implement the isValid() method to define the validation logic }</code>
在此實作中,您可以存取物件實例的多個欄位(在本例中為位址)並套用必要的驗證規則。
註解模型類別
最後,使用AddressAnnotation 註解您的MyModel 類別:
<code class="java">@AddressAnnotation public class MyModel { ... }</code>
透過利用類別層級約束,您可以有效地驗證使用Hibernate 驗證以穩健且靈活的方式組合欄位。
以上是如何驗證 JPA 2.0/Hibernate 中的欄位組合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!