Spring MVC、Hibernate 3和@Valid问题

Spring MVC、Hibernate 3和@Valid问题,hibernate,validation,spring-mvc,annotations,Hibernate,Validation,Spring Mvc,Annotations,我有一个带JDBC的SpringMVC,它使用@Valid注释,包括验证在内,一切都很好地工作 现在我已经创建了一个类似的webapp,它使用了Hibernate(而不是JDBC),并且到目前为止,它也运行得很好 我决定在继续使用更多域之前“插销”验证 因此,我在控制器中的保存过程中添加了@Valid,如下所示: @RequestMapping(value = "/productgroup/save", method = RequestMethod.POST) public String upd

我有一个带JDBC的SpringMVC,它使用@Valid注释,包括验证在内,一切都很好地工作

现在我已经创建了一个类似的webapp,它使用了Hibernate(而不是JDBC),并且到目前为止,它也运行得很好

我决定在继续使用更多域之前“插销”验证

因此,我在控制器中的保存过程中添加了@Valid,如下所示:

@RequestMapping(value = "/productgroup/save", method = RequestMethod.POST)
public String updateProductGroup(**@Valid** ProductGroup productGroup, BindingResult bindingResult) 
这是我唯一做的更改,现在它崩溃了:

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) 严重:Servlet appServlet的Servlet.service()引发异常 java.lang.NoSuchMethodError:javax.persistence.persistence.getPersistenceUtil()Ljavax/persistence/PersistenceUtil; 位于org.hibernate.validator.engine.resolver.jpatransablesolver.isReachable(jpatransablesolver.java:33) 位于org.hibernate.validator.engine.resolver.DefaultTraversableResolver.isRecable(DefaultTraversableResolver.java:112) 位于org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver.isRecable(SingleThreadCachedTraversableResolver.java:47) 位于org.hibernate.validator.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:764) 位于org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:331) 位于org.hibernate.validator.engine.validateImpl.validateConstraintsForRedefinedDefaultGroup(validateImpl.java:278) 位于org.hibernate.validator.engine.validateImpl.validateConstraintsForCurrentGroup(validateImpl.java:260) 位于org.hibernate.validator.engine.validateImpl.validateInContext(validateImpl.java:213) 位于org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:119) 位于org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:86) 我正在使用: org.hibernate 休眠验证器 4.0.2.GA 罐子 javax.validation 验证api 1.0.0.GA

我已经在ProductGroup的productGroupName字段及其Getter上尝试了@NotEmpty

有什么想法吗


我真的没想到会出现任何问题,因为我在JDBC版本中进行验证时没有遇到任何问题…

Hibernate Validator对JPA有可选的依赖关系,但是当类路径中存在JPA时,Hibernate Validator 4要求它是JPA 2.0。在您的例子中,类路径中有JPA1.0


换句话说,HibernateValidator4与Hibernate3.5或更高版本兼容。有关Hibernate的旧版本,请参阅。

感谢您的快速响应,非常感谢。我是春天和冬眠的新手,所以请容忍我。这个webapp只是我的学习方式,所以如果有必要,我可以改变任何东西。我唯一指定的另一个Hibernate jar是Hibernate entitymanager 3.3.2.GA,它具有依赖性。对于应该使用哪个版本的Hibernate,我有点困惑。关于如何进行最佳设置,您有什么建议吗?@Lyndon:如果您对Hibernate版本没有任何限制,请使用最新版本,即3.6.1-Final。@axtavt:我获得了Hibernate entitymanager 3.5.5-Final(在我阅读您的答复之前),并将其放入我的pom.xml中。但现在我甚至无法向我的控制器发出请求!我只是得到“请求的资源(/Product/productgroups.html)不可用”。在启动时,我得到了很多关于org.hibernate的信息语句,其中一条是:INFO:org.hibernate.cfg.Environment-hibernate.properties not found。有没有新的方法来设置Hibernate?我也可以看到很多这样的信息行:INFO:…DefaultAnnotationHandlerMapping-Mapped URL路径[/productgroups/]到处理程序'productGroupController'@axtavt:我试图让3.6.1-Final正常工作,但我一直得到以下信息:[警告]org.hibernate:hibernate core:jar:3.6.1-Final的POM丢失,没有可用的依赖项信息缺少工件org.hibernate:hibernate core:jar:3.6.1-Final:compile不确定该怎么办…@axtavt:Changed back to hibernate core 3.5.5-Final,但现在我得到:[WARN]org.springframework:spring webmvc:jar:3.0.4.RELEASE无效,传递依赖项(如果有的话)将不可用,启用调试日志了解更多详细信息我说过这令人沮丧吗?不管怎样,我不想成为一个痛苦的人,我只是想让你知道我一直在试图自己解决这个问题。。。有什么想法吗?