20

我注意到所有内置约束的validatedBy参数都为空值@Constraint。IE@Constraint(validatedBy = {})

首先,为什么允许它们有一个空值validatedBy?我认为您可以将其留空,仅用于不需要额外验证的约束组合?

另外,请注意,Hibernate Validator 仍然可以为每个内置约束找到一个验证器实现类,尽管它validatedBy是空的,但是如果我为我的约束留空 validateBy ,我的自定义验证器永远不会被拾取。这是为什么?

谢谢。

4

3 回答 3

12

这些内置以特定于实现的特殊方式处理,并且它们的验证器以编程方式配置。

对于 Hibernate Validator,它是在ConstraintHelper.java. 我认为您无法为自定义约束实现相同的目标。

于 2010-12-22T19:33:57.540 回答
0

现在有几种方法可以将接口与约束定义和验证器解耦,因此您可以将它们放在不同的层中,并将validatedBy属性留空。最简单的方法之一是使用Hibernate ServiceLoader在资源文件夹中的文件中添加验证器类/META-INF/services/javax.validation.ConstraintValidator(更改为jakarta.validation.ConstraintValidator使用 Hibernate 7)。

于 2022-02-14T16:04:53.890 回答