如何在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预更新和预插入事件。

你可以在这里和这里阅读更多相关信息。

希望能帮助到你。