2011-02-17 3 views
3

J'ai un Spring MVC avec JDBC qui utilise les annotations @Valid et tout fonctionne très bien, y compris la validation.Spring MVC, Hibernate 3 et @Valid Problème

Maintenant, j'ai créé une application Web similaire qui utilise Hibernate (au lieu de JDBC) et il fonctionne aussi bien jusqu'à présent.

j'ai décidé de « boulon » avant de poursuivre la validation avec plus de domaines, etc.

J'ajouté @Valid au processus de sauvegarde dans le contrôleur comme si:

@RequestMapping(value = "/productgroup/save", method = RequestMethod.POST) 
public String updateProductGroup(**@Valid** ProductGroup productGroup, BindingResult bindingResult) 

C'est le ne changement que je fais et maintenant il se bloque avec:

SEVERE: Servlet.service() for servlet appServlet threw exception 
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) 
    at org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:86)

Je suis u chanter: org.hibernate mise en veille prolongée validateur 4.0.2.GA pot javax.validation validation api 1.0.0.GA

J'ai essayé @NotEmpty sur les deux productGroupName du ProductGroup domaine et son Getter.

Des idées?

J'ai vraiment jamais attendu aucun problème ici comme je l'avais aucun problème pour la validation de travailler dans ma version JDBC ...

Répondre

3

Hibernate Validator a une dépendance en option sur JPA, mais quand JPA est présent dans le classpath, Hibernate Validator 4 exige que ce soit JPA 2.0. Dans votre cas, vous avez JPA 1.0 dans le classpath. En d'autres termes, Hibernate Validator 4 est compatible avec Hibernate 3.5 ou supérieur. Pour une version plus ancienne d'Hibernate, voir Hibernate Compatibility Matrix.

+0

Merci pour la réponse rapide, c'est vraiment apprécié. Je suis nouveau au printemps et Hibernate alors s'il vous plaît ours avec moi. Cette webapp est juste ma façon d'apprendre, donc je peux changer n'importe quoi si nécessaire. Le seul autre fichier Hibernate que j'ai spécifié est hibernate-entitymanager 3.3.2.GA qui a des dépendances. Je suis un peu confus quant à la version d'Hibernate que je devrais utiliser. Des conseils sur la meilleure configuration pour moi de procéder? – Lyndon

+0

@Lyndon: Si vous n'avez aucune restriction sur la version d'Hibernate, utilisez la dernière, qui est 3.6.1-Final. – axtavt

+0

@axtavt: J'ai reçu hibernate-entitymanager 3.5.5-Final (avant de lire votre réponse) et le mettre dans mon fichier pom.xml. Mais maintenant je ne peux même pas demander à mon contrôleur! Je viens d'obtenir 'La ressource demandée (/Product/productgroups.html) n'est pas disponible.' Au démarrage, je reçois beaucoup d'instructions INFO pour org.hibernate, dont l'une est: INFO: org.hibernate.cfg.Environment - hibernate.properties non trouvé. Existe-t-il une nouvelle façon de configurer Hibernate? Je peux voir beaucoup de lignes d'INFO comme ceci aussi: INFO: ... DefaultAnnotationHandlerMapping - Mappé le chemin d'URL [/ productgroups /] sur le gestionnaire 'productGroupController' – Lyndon