Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HibernateValidator 5似乎没有对JPA实体进行级联验证_Hibernate_Validation_Hibernate Validator - Fatal编程技术网

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

HibernateValidator 5似乎没有对JPA实体进行级联验证,hibernate,validation,hibernate-validator,Hibernate,Validation,Hibernate Validator,我对Hibernate和Hibernate Validator 5有问题。我有一些实体,比如说Group和另一个实体Person。它们的关系如下:组中有两个对人的引用-联系人和经理。它们都是一对一关系,具有完全级联和孤立删除选项 我想要的是在保存组时验证联系人和经理。此外,我希望使用不同的验证组来验证联系人和经理。为了做到这一点,我将@ConvertGroup(from=Default.class,to=ContactPersonValidation.class)与@Valid一起放在联系人字段

我对Hibernate和Hibernate Validator 5有问题。我有一些实体,比如说
Group
和另一个实体
Person
。它们的关系如下:组中有两个对人的引用-联系人和经理。它们都是一对一关系,具有完全级联和孤立删除选项

我想要的是在保存组时验证联系人和经理。此外,我希望使用不同的验证组来验证联系人和经理。为了做到这一点,我将
@ConvertGroup(from=Default.class,to=ContactPersonValidation.class)
@Valid
一起放在联系人字段之前,并对经理字段进行了类似的操作(使用不同的验证组)

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


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

在JPA触发的生命周期验证期间,Bean验证使用
可遍历解析器
,如果它们标记有
@Valid
(请参阅3.6.1.2“生命周期事件自动验证的要求”),则该解析器不会跟踪关联JPA2.0规范中的)

因此,您的
个人
对象不会通过跟踪
中的引用进行验证,而是在它们自身被持久化时进行验证。因此,在
group
上声明的组转换不适用


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

如果显示实际的注释实体以及如何保存/持久化实体,这将有所帮助。您使用的是本机Hibernate会话还是JPA?如何进行验证?您是否依赖基于生命周期的验证?我使用本机Hibernate会话,并且依赖基于生命周期的验证。我知道它使用
TraversableResolver
,并且不跟踪关联。我已经按照您描述的方式(使用GroupSequenceProvider)完成了这项工作,但我希望有一些技巧可以更好地(或者“更干净”)完成这项工作:)