Hibernate验证器错误 - 4.0.2.GA

时间:2010-01-12 17:46:56

标签: hibernate validation

Hibernate Validator的validate函数似乎有些错误(版本为hibernate-validator-4.0.2.GA.jar)。我可能会错过依赖吗?

我的堆栈跟踪的一部分:

java.lang.NoSuchMethodError: javax.persistence.Persistence.getPersistenceUtil()Ljavax/persistence/PersistenceUtil;
        at org.hibernate.validator.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:33)
        at org.hibernate.validator.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:112)
        at org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(SingleThreadCachedTraversableResolver.java:47)
        at org.hibernate.validator.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:764)
        at org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:331)
        at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForRedefinedDefaultGroup(ValidatorImpl.java:278)
        at org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:260)
        at org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:213)
        at org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:119)

6 个答案:

答案 0 :(得分:6)

我认为这是因为它认为你正在使用JPA2,但实际上你正在使用JPA1。如果你不需要它,请删除jpa-api-2.0.Beta-20090815.jar,它包含在Hibernate Validator的发行版中,然后再试一次。

答案 1 :(得分:2)

这似乎是根据此Jira在Hibernate验证器的版本4.2.0.Beta1中修复的错误:https://hibernate.onjira.com/browse/HV-374

堆栈跟踪非常混乱,因为它表明正在使用Java 5,但我确信我运行的是Java 6。

我也没有更新验证器的选项,我已经运行了ejb3-persistence-1.0.2.GA.jar,这是@Gaim提出的解决方案所以我需要创建自己的CustomTraversableResolver来强制JPA1。有关如何执行此操作的详细信息,请访问:http://soadev.blogspot.se/2010/02/jsr-303-bean-validation-error.html

答案 2 :(得分:1)

我今天坚持这个问题,并对此进行了一些挖掘。我发现@Javi的答案很有帮助,但它没有解决我的问题。另外几十分钟的谷歌搜索让我发现了以下内容:

版本4.0.2.GA中的Hibernate验证器(可能还有其他版本)检测到类javax.persistence.PersistenceUtil 的JPA 版本,因为此类包含在JPA 1中,但它在JPA 2中。不幸的是,有些库实现了这个类,这使得Hibernate有点混乱。在这种情况下,它也尝试在Java 1.5环境中使用JPA 2,这会抛出问题中提到的异常。

解决方案很简单。找出添加此类的库并将其删除。就我而言,它是 ejb3-persistence-1.0.1.GA.jar 。很久以前就报告了这个错误,在版本 ejb3-persistence-1.0.2.GA.jar 中它已修复。所以这次升级解决了我的问题。

答案 3 :(得分:0)

刚才我发现java 6中存在当前的依赖关系。一旦我升级到java 6,上面的所有错误都消失了。

http://javaprogrammingtips4u.blogspot.com

答案 4 :(得分:0)

尝试将ejb3-persistence 1.0.2GA添加到您的类路径/ maven pom:

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>ejb3-persistence</artifactId>
   <version>1.0.2.GA</version>       
</dependency>

这里有一个很好的解释:dependency-hell-or-including-jsr303

答案 5 :(得分:0)

尝试升级到hibernate-validator 4.2 +版本。我在使用hibernate-validator 4.1.0时遇到了同样的问题,但是当我升级到v 4.2.0时问题就消失了

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
        <version>4.2.0.Final</version>
    </dependency>