Mengesahkan Berbilang Medan dalam Gabungan
Dalam JPA 2.0/Hibernate, anotasi @NotNull ringkas pada berbilang medan hanya akan mengesahkan medan individu. Untuk mengesahkan gabungan medan, pertimbangkan untuk menggunakan kekangan peringkat kelas.
Seperti yang diterangkan dalam Bean Validation Sneak Peek bahagian II: kekangan tersuai, kekangan peringkat kelas membenarkan logik pengesahan digunakan merentas berbilang sifat dalam objek . Ini amat berguna untuk peraturan pengesahan kompleks yang bergantung pada berbilang medan.
Pelaksanaan
Untuk melaksanakan kekangan peringkat kelas, tentukan anotasi (@AddressAnnotation) dan kekangan pengesah (MultiCountryAddressValidator). Anotasi menentukan peraturan pengesahan untuk digunakan, manakala pengesah melaksanakan logik untuk mengesahkan gabungan medan.
@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 // ... } }
Dalam pengesah, tika objek dihantar kepada kaedah isValid, membenarkan akses kepada semua medan untuk tujuan pengesahan. Pengesah boleh menyemak kesalingbergantungan antara medan, seperti korelasi antara poskod dan bandar.
Penggunaan
Setelah ditakrifkan, kekangan peringkat kelas boleh digunakan untuk kelas model menggunakan anotasi:
@AddressAnnotation public class MyModel { public Integer getValue1() { //... } public String getValue2() { //... } }
Anotasi ini menunjukkan bahawa MultiCountryAddressValidator harus digunakan untuk mengesahkan gabungan getValue1() dan getValue2(). Jika kedua-dua medan adalah batal, model itu dianggap tidak sah. Jika tidak, model itu sah.
Atas ialah kandungan terperinci Bagaimana untuk Mengesahkan Pelbagai Medan dalam Gabungan dalam JPA 2.0/Hibernate?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!