Hibernate验证器错误 - 4.0.2.GA

问题描述:

Hibernate Validator的validate函数似乎是buggy(版本hibernate-validator-4.0.2.GA.jar)。我可能错过了一个依赖关系?我的堆栈跟踪的Hibernate验证器错误 - 4.0.2.GA

部分:

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) 
+0

不能做任何事情,不用Hibernate的配置......也许你在一个属性指定该类中不存在的配置。请提供更多信息,并阅读如何在此提问。 – Zoidberg 2010-01-12 17:50:24

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

+0

我们找到了解决我们原来的问题,并停止搜索这一点。所以,我仍然不知道解决方案,但它必须与版本有关。无论如何感谢您的帮助。 – 2010-01-21 09:57:13

+0

太棒了,刚刚在Google上发现了这个,删除那个jar为我修复了它。你是一个传奇! – Rick 2011-01-27 21:11:29

+0

谢谢!也救了我! – Stevko 2011-03-10 02:02:05

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

http://javaprogrammingtips4u.blogspot.com

我在这个问题上卡住今天并在其上做了一些挖掘。我发现@ Javi的答案很有帮助,但并没有解决我的问题。谷歌搜索的另一个几十分钟带我找到了以下工作:在版本4.0.2.GA

Hibernate的验证(可能也在其他)检测的版本JPA 通过javax.persistence.PersistenceUtil,因为这个类是NOT包含在JPA 1中,但是它在JPA 2中。不幸的是,一些库实现了这个类,使得Hibernate有点困惑。在这种情况下,它会尝试在Java 1.5环境中使用JPA 2,这会引发问题中提到的异常。

解决方案很简单。找出添加此类的库并将其删除。在我的情况下,它是ejb3-persistence-1.0.1.GA.jar。这个bug很早以前就报告过了,版本号为ejb3-persistence-1.0.2.GA.jar它是固定的。有这样的升级解决了我的情况下的问题。

尝试增加EJB3持久性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

这似乎是已经被固定在一个错误根据这个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

尝试升级到hibernate-validator 4.2 +版本。我曾与Hibernate验证器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>