我不知道Hibernate如何找到NullValidator类,该类扩展了ConstraintValidator接口(interface),即使@Null注释定义如下:

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { })
public @interface Null {}

最佳答案

validatedBy仅需要针对自定义(即用户创建的)约束进行指定。 Hibernate已知的所有内置约束都将自动映射。请参见以下代码,它们显示在ConstraintDescriptorImplXmlMappingParser中:

if ( constraintHelper.isBuiltinConstraint( annotationType ) ) {
    constraintDefinitionClasses.addAll( constraintHelper.getBuiltInConstraints( annotationType ) );
}
else {
    Class<? extends ConstraintValidator<?, ?>>[] validatedBy = annotationType
            .getAnnotation( Constraint.class )
            .validatedBy();
    constraintDefinitionClasses.addAll( Arrays.asList( validatedBy ) );
}
ConstraintHelper包含所有内置约束的列表,这些约束类型的isBuiltinConstraint方法将找到这些列表。

09-04 20:19