使用数据库连接的JSR303验证

时间:2012-08-07 07:36:14

标签: database bean-validation

一般问题:

这是使用JSR303 bean验证,Hibernate参考实现。

假设我有一组自定义验证;其中一些需要数据库连接(注意:我们没有使用Hibernate进行数据库元素映射,所以不幸的是这不是一个选项)。例如,我可能想要在持久化之前验证foriegn键。

无论如何,在将数据库连接传递给Validator.validate(obj)方法时,我看不到一种方法,以使其可用于验证实现。出于会话一致性的原因,此连接与调用代码中使用的连接相同非常重要。

任何想法......?我真正需要的是一种在验证器实现中获得任何类型的运行时值的方法。

谢谢,

安迪

1 个答案:

答案 0 :(得分:1)

您可以创建自定义ConstraintValidatorFactory来实例化和配置ConstraintValidator个对象。此工厂可以将所需的依赖项(如数据库连接)传递给创建的约束验证器。

如果您使用CDI连接应用程序,您可能会对Seam Validation(免责声明:我是作者)感兴趣,它为基于CDI的验证器提供依赖注入。如果您正在使用Spring Framework,那么您还可以在约束验证器实现中make use进行依赖注入。