HibernateValidator 5似乎没有对JPA实体进行级联验证

时间:2013-11-08 09:07:17

标签: hibernate validation hibernate-validator

我遇到了Hibernate和Hibernate Validator 5的问题。我有一些实体,比方说Group和另一个实体Person。它们的关联如下:集团有两个人参考 - 联系人和经理。它们是完全级联和孤立删除选项的一对一关系。

我想要的是在保存群组时验证联系人和管理员。我想要一个不同的验证组来验证联系人和经理。为了做到这一点,我在联系人字段之前将@ConvertGroup(from = Default.class, to = ContactPersonValidation.class)@Valid放在一起,我为管理员字段(使用不同的验证组)类似地做了。

现在,Hibernate验证不起作用 - 我的意思是该组未转换为@ConvertGroup中提供的组。我遵循了Hibernate验证器的源代码,它似乎分别验证了Group对象和两个Person对象。因此,Person验证不会从Group对象级联,并且不会转换验证组。

您是否遇到过类似问题并知道如何解决?

1 个答案:

答案 0 :(得分:2)

在JPA触发的生命周期验证期间,Bean Validation使用TraversableResolver,如果它们标有@Valid,则不会跟进关联(请参阅3.6.1.2“生命周期事件自动验证的要求) “JPA 2.0规范”。

因此,Person对象不会通过跟踪来自Group的引用来验证,但是当它们自己被持久化时,它们将被验证。因此,Group上声明的群组转化不适用。

您可以通过为Person定义GroupSequenceProvider来实现所需的行为(请注意,这是Hibernate Validator特定的功能)。为此,您必须将人员的“角色”(例如,具有值ContactManager的枚举形式)传递给Person个实例。然后,如果持久存在给定的Person实例,则默认组序列提供程序可以访问该角色并应用一个或另一个验证组。