如何在hibernate中保留实体期间validation实体上的约束
我有一个带字段名称的实体,我希望它不超过255,所以我这样定义:
@Entity public class A implements Serializable { ... @NotNull @Size(max=255) private String name;
我希望它在我调用a.persist()时得到validation,因此如果name太长则抛出exception。
我在validation.xml中定义了HibernateValidator:
org.hibernate.validator.HibernateValidator org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator org.hibernate.validator.engine.resolver.DefaultTraversableResolver org.hibernate.validator.engine.ConstraintValidatorFactoryImpl
但它不起作用。 在持久化期间不会抛出exception,并且仅在提交期间,当刷新实体管理器时,我是否得到exception,即使这样,它也是数据库中的exception(因为它对大小为255的列也有限制)。 所以我相信我的validation根本不起作用。
如果你帮助我解决这两个问题,我会很高兴:1)如何在持久化期间进行validation而不是在刷新期间2)如何在validation失败时导致validation抛出exception?
您可以使用Hibernatevalidation器 。
您必须打开BeanValidationEventListener
预更新和预插入事件。
你可以在这里和这里阅读更多相关信息。
希望能帮助到你。
- 自JPA 2.1以来如何命名ManyToOne引用的外键约束?
- 使用Hibernate中的注释定义默认列值
- Sprint引导数据JPA:没有类型为’java.util.Set ‘的限定bean
- 使用注释的hibernate,我希望对一对多的关系进行排序
- JPA 2.0使用Hibernate作为提供程序 – 例外:没有EntityManager的持久性提供程序
- Jersey:com.sun.jersey.spi.inject.Errors $ ErrorMessagesException
- Spring-Hibernate – 找不到当前线程的Session
- 如何在没有HQL的情况下在Hibernate中执行普通的SQL查询?
- 自动连接到hibernate拦截器