有没有一种方法可以使用 Hibernate 进行嵌套约束验证,而无需使用 @Valid 注释?

Is there a way for nested constraint validation using Hibernate, without using @Valid annotation?

我有一个包含大量嵌套对象和字段的巨大对象模型。我需要验证基础对象的 all 字段。有没有办法在不向所有字段添加 @Valid 注释的情况下做到这一点?

示例对象:

class A { @NotNull private String id; ...}
class B { @NotNull private String id; List<A> aList; ...}
class C { @NotNull private String id; B bInstance; A aInstance; ...}
class D { @NotNull private String id; List<C> cList; ... }
...

如果我需要递归验证 D 的实例,我必须在 A、B、C、D 的所有相关字段中放入 @Valid。 我的对象模型中有大量对象。很容易错过将注释放在字段上。

不,您应该将所有必需的 @Valid 注释添加到您的对象图中。

如果这真的会成为问题,您可以尝试使用 Hibernate Validator 的 API 来自动执行动态约束违规。您必须反射性地遍历对象模型并为遇到的每个引用(普通对象引用或 collections/maps/arrays)调用 valid()

但我建议不要这样做,因为它增加了相当多的复杂性,并使解决方案比看普通 @Valid 更难理解。注释。