2010-01-12 4 views
4

La fonction de validation du validateur Hibernate semble être boguée (version hibernate-validator-4.0.2.GA.jar). Est-ce que je peux manquer une dépendance?Erreur de validation Hibernate - 4.0.2.GA

Une partie de ma trace de la pile:

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

ne peut rien faire sans la configuration de mise en veille prolongée ... peut-être vous avez un bien déterminé dans la configuration qui n'existe pas dans la classe. S'il vous plaît fournir plus d'informations, et aussi lire sur la façon de poser des questions ici. – Zoidberg

Répondre

6

Je pense qu'il est dû au fait qu'il pense que vous utilisez JPA2 mais en fait vous utilisez JPA1. Supprimez le jpa-api-2.0.Beta-20090815.jar qui est inclus avec la distribution de Hibernate Validator si vous n'en avez pas besoin et réessayez.

+0

Nous avons trouvé une solution à notre problème d'origine et avons arrêté de chercher sur ce point.Donc, je ne connais toujours pas la solution mais cela doit avoir quelque chose à voir avec les versions. Merci pour l'aide de toute façon .. –

+0

Génial, je viens de le trouver sur Google, en supprimant ce pot fixé pour moi. Tu es une légende! – Rick

+0

Merci! M'a sauvé aussi! – Stevko

1

Je coincé sur cette question aujourd'hui et a fait quelques recherches sur elle. J'ai trouvé la réponse de @ Javi utile mais cela n'a pas résolu mon problème. Encore des dizaines de minutes googler m'a emmené à savoir ce qui suit:

Hibernate Validator dans la version 4.0.2.GA (et probablement aussi dans les autres) détecte la version JPA par classe javax.persistence.PersistenceUtil, parce que cette classe est pas contenu dans JPA 1 mais il est dans JPA 2. Malheureusement certaines bibliothèques implémente cette classe ce qui rend le Hibernate un peu confus. Dans ce cas, il essaie d'utiliser JPA 2 également dans l'environnement Java 1.5, ce qui déclenche une exception mentionnée dans la question.

La solution est simple. Découvrez la bibliothèque en ajoutant cette classe et supprimez-la. Dans mon cas c'était ejb3-persistence-1.0.1.GA.jar. Ce bug a été signalé il y a longtemps et dans la version ejb3-persistence-1.0.2.GA.jar il est corrigé. Donc, cette mise à niveau a résolu le problème dans mon cas.

0

Essayez d'ajouter 1.0.2GA ejb3 persistance à votre chemin classe/maven pom:

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

Il y a une bonne explication ici: dependency-hell-or-including-jsr303

2

Cela semble être un bug qui ont été corrigés dans La version 4.2.0.Beta1 du validateur Hibernate selon ce Jira: https://hibernate.onjira.com/browse/HV-374

La trace de la pile est très déroutante car elle suggère que Java 5 est utilisé mais j'étais sûr que j'utilisais Java 6.

Je n'avais pas non plus la possibilité de mettre à jour le validateur et je courais déjà ejb3-persistence-1.0.2.GA.jar qui est une solution proposée par @Gaim, donc j'avais besoin de créer mon propre CustomTraversableResolver qui force JPA1 . Les détails sur la façon de le faire sont disponibles ici: http://soadev.blogspot.se/2010/02/jsr-303-bean-validation-error.html

0

Essayez de passer à la version 4.2 + hibernate-validator. J'ai eu le même problème avec mise en veille prolongée validateur 4.1.0 mais quand je suis passé à v 4.2.0 la question allé

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