2016-02-29 83 views
1

我是新来休眠验证器JSR303休眠动态验证器

我想有一个注释和许多实现。问题是,该注释应该放置在相应的实现模块(xx-command,xx-query)中的domain(api)模块和实现中。所以@Constraint注释的参数validatedBy必须为空。
我可以动态地告诉休眠使用指定注释的所有实现,它可以传递我需要的类型。另外我想在多个子模块中实现。

@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 {}; 
} 

这是我的项目结构(以依赖顺序访问命令取决于访问查询,在infrastrucutre访问查询dependes ...)
-API
-infrastructure
-accessor查询
-accessor命令

我发现this问题,并希望使用XML配置(见在回答编辑部分),但它没有帮助,因为我想用在执行许多模块>>>提到here

给定实体只能在所有配置文件中配置一次。给定约束注释的约束定义也是如此。它只能出现在一个映射文件中。如果违反这些规则,则抛出ValidationException。

所以我不能将约束分割为多个xml配置。

此验证程序的基本需求是查看存储库并验证指定对象是否已存在。我也在我的项目中使用spring,所以如果有人有更好的方法如何做到这一点(即使是春季或其他框架),这将是受欢迎的。

感谢

回答

0

你的问题被打上“春天”,所以可能是你可以使用弹簧验证发动机罩下使用Hibernate:

[spring validation][1] 

让你的验证器实现的接口春天验证,创建它的一颗豆子,就是这样。