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)
我认为这是因为它认为你在使用JPA2但事实上,你正在使用的JPA1事实。如果您不需要它并再次尝试,请删除Hibernate Validator分发中包含的jpa-api-2.0.Beta-20090815.jar。
我在这个问题上卡住今天并在其上做了一些挖掘。我发现@ 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>
不能做任何事情,不用Hibernate的配置......也许你在一个属性指定该类中不存在的配置。请提供更多信息,并阅读如何在此提问。 – Zoidberg 2010-01-12 17:50:24