我是hibernate验证器的新手
我想有一个注释和许多实现。问题是,该注释应放在域(api)模块中,并在相应的实现模块(xx-command,xx-query)中实现。因此validatedBy
注释的参数@Constraint
必须为空
我可以以某种方式动态地告诉hibernate使用指定注释的所有实现,它可以传递我需要的类型。此外,我希望在多个子模块中实现。
@Target({FIELD, PARAMETER})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
public @interface CanNotExists {
String message() default "com.foo.api.domain.validation.annotation.CanNotExists.message";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
这是我的项目结构(依赖顺序,accessor-command取决于访问者查询,访问者查询依赖于基础设施...)
-API
-infrastructure
-accessor查询
-accessor-命令
我发现了this问题并希望使用xml配置(请参阅答案中的编辑部分),但它没有用,因为我想在许多模块中使用实现&gt;&gt;&gt;如上所述here
给定实体只能在所有配置文件中配置一次。这同样适用于给定约束注释的约束定义。它只能出现在一个映射文件中。如果违反了这些规则,则抛出ValidationException。
因此,我无法将约束分割为多个xml配置。
此验证器的基本需求是查看存储库并验证指定的对象是否已存在。我也在我的项目中使用spring,所以如果有人能够更好地处理如何做到这一点(即使使用spring或其他框架),也会受到欢迎。
由于
答案 0 :(得分:0)
您的问题标有'spring',因此您可以使用引擎盖下使用休眠的弹簧验证:
[spring validation][1]
让你的验证器实现接口spring Validator,创建它的bean,就是这样。