Mi método preferido es usar JSR 303 (Bean Validation API) para asegurar que las propiedades de la clase son válidos.
Está bastante bien para realizar la validación en setters, pero esto no siempre es un enfoque deseable. Existe el potencial de mezclar las necesidades de varios contextos que no están relacionados entre sí. Por ejemplo, algunas de sus propiedades nunca deben configurarse desde la interfaz del usuario, sino que un servicio las calculará antes de que se conserven. En tal caso, no es deseable tener esta lógica dentro de un setter, ya que necesitaría conocer el contexto en el que se invoca al setter; necesitarás aplicar diferentes reglas en tu capa de interfaz de usuario y en tu capa de persistencia. JSR 303 le permite separar estas preocupaciones usando grupos de validación, para que su grupo de validación UI sea diferente de su grupo de validación de persistencia.
En JPA 2.0, cuando Anote en su clase mediante limitaciones que son evaluados por un validador de JSR 303, el proveedor de persistencia puede evaluar automáticamente estas limitaciones en el PrePersist
, PreUpdate
y PreRemove
(por lo general no se realiza, véase más adelante) eventos del ciclo de vida de entidades. Para realizar la validación de entidades en su proveedor de JPA, debe especificar el elemento validation-mode
o la propiedad javax.persistence.validation.mode
en su archivo persistence.xml
; los valores deben ser AUTO
(valor predeterminado) o CALLBACK
(y no NONE
).
La presencia de un proveedor de Validación de frijoles es suficiente para garantizar que la validación se produce en los eventos del ciclo de vida de la entidad JPA, ya que el valor predeterminado es AUTO
. Obtienes esto por defecto, en un servidor de aplicaciones Java EE 6; Glassfish utiliza la implementación de RI de JSR 303, que es Hibernate Validator, y también funciona bastante bien con EclipseLink.
El modo CALLBACK
le permitirá anular los grupos de validación que se aplicarán cuando se desencadenen los eventos del ciclo de vida. De forma predeterminada, el grupo de validación de Bean predeterminado (Default
) se validará para los eventos de actualización y persistencia; el evento de eliminación no implica ninguna validación. El modo CALLBACK
le permite especificar un grupo de validación diferente para estos eventos, utilizando las propiedades javax.persistence.validation.group.pre-persist
, javax.persistence.validation.group.pre-update
y javax.persistence.validation.group.pre-remove
.
Tenga en cuenta que la validación de JSR 303 se puede utilizar fuera de un contenedor Java EE, aunque el enlace de la documentación de la API Bean Validation que publiqué anteriormente es de la documentación de la API de Java EE 6.
Gracias! Su ayuda es muy apreciada, y me alegra saber sobre el otro enfoque :) – VaclavDedik
de nada :) –