Tengo una entidad con un nombre de campo, y yo quiero que sea no más de 255, por lo que se define así:¿Cómo puedo validar restricciones sobre las entidades durante el persistir de una entidad en hibernación
@Entity
public class A implements Serializable {
...
@NotNull
@Size(max=255)
private String name;
Quiero que se valide cuando llamo a.persist(), de modo que si el nombre es demasiado largo, se lanza una excepción.
he HibernateValidator definido en validation.xml:
<?xml version="1.0" encoding="UTF-8"?>
<validation-config
xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration validation-configuration-1.0.xsd">
<default-provider>org.hibernate.validator.HibernateValidator</default-provider>
<message-interpolator>org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator</message-interpolator>
<traversable-resolver>org.hibernate.validator.engine.resolver.DefaultTraversableResolver</traversable-resolver>
<constraint-validator-factory>org.hibernate.validator.engine.ConstraintValidatorFactoryImpl</constraint-validator-factory>
</validation-config>
Sin embargo, esto no funciona. No se lanza ninguna excepción durante la persistencia, y solo durante la confirmación, cuando el administrador de la entidad se vacía, obtengo una excepción, e incluso entonces es una excepción de la base de datos (porque también tiene una limitación en la columna con el tamaño 255). Así que creo que mi validación no funciona en absoluto.
así que estaría contento si usted me ayudó con esas dos preguntas: 1) cómo hacer la validación ocurra durante persistir y no durante ras 2) cómo hacer que la validación para lanzar excepciones cuando la validación falla?
Gracias. Es útil, ahora ocurre la validación, pero ocurre durante la descarga (lo que puede no suceder hasta que me comprometo), no durante la persistencia. ¿Hay alguna manera de hacerlo posible cuando llamo persist()? –
Creo que esto es un comportamiento normal porque su identificación se asigna solo cuando se vacía la sesión y esta es en realidad la etapa en que Hibernate persiste en sus objetos. –
Eso es todo. En "persist()" no procede la validación(). Solo si vacías() o comprometes tu transacción validará tus beans. Entonces hago primero un persist() y luego un flush() – flipperweid