Cách tiếp cận ưa thích của tôi là sử dụng JSR 303 (API xác thực đậu) để đảm bảo rằng các thuộc tính của lớp là hợp lệ.
Bạn hoàn toàn có thể thực hiện xác thực trong các trình cài đặt, nhưng đây không phải lúc nào cũng là một cách tiếp cận mong muốn. Có khả năng trộn lẫn nhu cầu của một số bối cảnh không liên quan đến nhau. Ví dụ, một số thuộc tính của bạn không bao giờ được thiết lập từ giao diện người dùng, và thay vào đó sẽ được tính bởi một dịch vụ, trước khi được duy trì. Trong một sự kiện như vậy, nó không được mong muốn để có logic này bên trong một setter, cho bạn sẽ cần phải biết bối cảnh trong đó setter đang được gọi; bạn sẽ cần phải áp dụng các quy tắc khác nhau trong lớp giao diện người dùng và trong lớp kiên trì của bạn. JSR 303 cho phép bạn tách các mối quan tâm này bằng cách sử dụng các nhóm xác nhận, do đó nhóm xác thực giao diện người dùng của bạn khác với nhóm xác thực tồn tại của bạn.
Trong JPA 2.0, khi bạn chú thích lớp học của bạn sử dụng các ràng buộc được đánh giá bởi một validator JSR 303, nhà cung cấp kiên trì của bạn có thể tự động đánh giá những khó khăn trên PrePersist
, PreUpdate
và PreRemove
(thường không được thực hiện, xem dưới đây) sự kiện vòng đời của thực thể. Để thực hiện xác thực các thực thể trong nhà cung cấp JPA của bạn, bạn phải chỉ định phần tử validation-mode
hoặc thuộc tính javax.persistence.validation.mode
trong tệp persistence.xml
của mình; các giá trị phải là AUTO
(mặc định) hoặc CALLBACK
(và không phải NONE
).
Sự hiện diện của nhà cung cấp xác thực Bean là đủ để đảm bảo xác thực xảy ra trên các sự kiện vòng đời thực thể JPA, vì giá trị mặc định là AUTO
. Bạn nhận được điều này theo mặc định, trong một máy chủ ứng dụng Java EE 6; Glassfish sử dụng sự thực thi RI của JSR 303 là Hibernate Validator, và nó hoạt động khá tốt với EclipseLink.
Chế độ CALLBACK
sẽ cho phép bạn ghi đè các nhóm xác thực sẽ được áp dụng khi các sự kiện vòng đời được kích hoạt. Theo mặc định, nhóm xác thực Bean mặc định (Default
) sẽ được xác thực để cập nhật và duy trì các sự kiện; sự kiện xóa không liên quan đến bất kỳ xác thực nào. Chế độ CALLBACK
cho phép bạn chỉ định nhóm xác thực khác cho những sự kiện này, sử dụng các thuộc tính javax.persistence.validation.group.pre-persist
, javax.persistence.validation.group.pre-update
và javax.persistence.validation.group.pre-remove
. Hãy nhớ rằng việc xác thực JSR 303 có thể được sử dụng bên ngoài một thùng chứa Java EE, mặc dù liên kết tài liệu API Validation API mà tôi đã đăng ở trên là từ tài liệu API Java EE 6.
Nguồn
2011-08-09 17:25:41
Cảm ơn! Sự giúp đỡ của bạn được đánh giá cao, và vui mừng khi biết về cách tiếp cận khác :) – VaclavDedik
bạn được chào đón :) –