2017-10-13 213 views
1

this是我的示例应用程序,它的test。我已将repository定义为@NotEmpty。当我想打电话给这个仓库我得到以下问题当返回类型使用@NotEmpty时,hibernate验证器错误

javax.validation.ConstraintDeclarationException: HV000141: The constraint org.hibernate.validator.constraints.NotEmpty used ConstraintTarget#IMPLICIT where the target cannot be inferred.

我是否需要实施验证了@NotEmpty或者这是一个bug处于休眠或我的春天启动的应用程序?

note当我从返回类型中删除@NotEmpty,它的工作原理。

+1

你可以带回这里的代码,它使问题更容易阅读(测试和回购)。 – 2017-10-13 14:27:36

+1

它似乎是HV中的一个bug,因为5.3和5.4都似乎缺少NotEmpty验证器实现。如果你想像你的例子那样在字符串上使用它,你可能会考虑'@ NotBlank' - 如果约束符合你的需求,这个应该可以正常工作。或者我也建议升级到Hibernate Validator 6.0。这是最新版本,有很多改进。 (但在6.0的情况下,你需要在你的配置上做一些修改,尽管...) –

+0

实际上,更多地考虑这点 - 来自HV的'@ NotEmpty'约束是一个复合约束,并且它没有Validator实现,因为它应该是使用Size和NotNull验证器的组合。这就是导致这个问题的原因(所以仍然看起来像一个错误,但稍有不同,比我在前面的评论中说的...) –

回答

1

您正在运行到一个有趣的角落情况下在这里,其中用于纯粹由约束不能确定是否适用于参数或方法的返回值。早在Bean Validation 1.1 we decided的时候,就把它留给实现来处理这种情况,因为它非常罕见。

Hibernate Validator允许在约束定义上解决此案例by specifying@SupportedValidationTarget(ValidationTarget.ANNOTATED_ELEMENT)。这是在HV 5.2中添加的,但是似乎我们忘记了将它用于@NotEmpty以及由HV定义的其他可能的纯粹约束约束。请问您能否在我们的JIRA instance中提交错误报告?

请注意,您应该没有在Bean Validation 2.0(HV 6.0)中定义的@NotEmpty问题,因为它没有被声明为纯粹的约束条件。

更新:此问题已在Hibernate Validator 6.0.3.Final中修复(并且已移植到5.3.6.Final和5.4.2.Final)。

+0

Btw。作为解决方法,如果您通过XML约束映射为'@ NotEmpty'添加虚拟'ConstraintValidator',它应该可以工作。它的'isValid()'方法总是返回'true',但它的存在会导致解析算法将约束(因此它的组成约束)应用于方法返回值而不是参数。 – Gunnar

+0

谢谢我已创建[此问题](https://hibernate.atlassian.net/browse/HV-1494) – bilak

相关问题