1

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

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

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

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

4

1 回答 1

2

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

因此,您的Person对象不会通过跟进引用来验证,Group但它们会在它们本身被持久化时得到验证。因此,声明的组转换Group不适用。

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

于 2013-11-08T14:45:27.070 回答