在运行时动态禁用hibernate验证注释?

时间:2016-06-28 22:20:21

标签: java hibernate hibernate-validator

是否可以在运行时关闭每个类的某些约束/注释?例如,如果我想对@NotNull字段进行firstName检查,那可能吗?

这会使测试看看某个约束是否被正确触发更简单,因为我可以关闭所有其他约束,并检查一个约束。

2 个答案:

答案 0 :(得分:1)

  

是否可以关闭每个类的某些约束/注释   在运行时?例如,如果我想转一个@NotNull检查   firstName字段,可能吗?

不,不是。 Bean Validation未定义此类功能。 Hibernate Validator HV-98中存在一个未解决的问题,它讨论了重新加载元数据的可能性,但即使在那里,您也需要重建验证器工厂。

您可以通过XML配置覆盖注释,然后使用不同的配置重新创建Validator(Factory)实例,但这可能不容易管理。

  

这将进行测试以查看是否存在某种约束   触发正确的更简单,因为我可以关闭所有其他   约束,只需检查一个约束。

如果是关于测试,您可以使用Validator.validateValue来验证给定字段。除此之外,如果您验证整个对象图并返回一组约束违规,您可以迭代它们并检查元数据。元数据中有足够的信息来验证特定约束是否已执行且失败。

答案 1 :(得分:0)

hibernate验证注释通常与数据库约束一起使用,因此在运行时更改行为没有意义。但是,如果你想这样做,你可以实现自己的验证器(通过覆盖现有的)并做任何你想做的事。