【问题标题】:Spring MVC, Hibernate 3 and @Valid ProblemSpring MVC、Hibernate 3 和@Valid 问题
【发布时间】:2011-06-29 01:29:42
【问题描述】:

我有一个带有 JDBC 的 Spring MVC,它使用 @Valid 注释,而且一切都很好,包括验证。

现在我创建了一个类似的 web 应用程序,它使用 Hibernate(而不是 JDBC),到目前为止它也运行良好。

在继续使用更多域等之前,我决定“加入”验证。

所以我将 @Valid 添加到 Controller 中的保存过程中:

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

这是我所做的唯一更改,现在它崩溃了:

严重:servlet appServlet 的 Servlet.service() 抛出异常
java.lang.NoSuchMethodError: javax.persistence.Persistence.getPersistenceUtil()Ljavax/persistence/PersistenceUtil;
    在 org.hibernate.validator.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:33)
    在 org.hibernate.validator.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:112)
    在 org.hibernate.validator.engine.resolver.SingleThreadCachedTraversableResolver.isReachable(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.ValidatorImpl.validateConstraintsForRedefinedDefaultGroup(ValidatorImpl.java:278)
    在 org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:260)
    在 org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.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.验证 验证-api 1.0.0.GA

我在 ProductGroup 的 productGroupName 字段及其 Getter 上都尝试过 @NotEmpty。

有什么想法吗?

我真的没想到会出现任何问题,因为在我的 JDBC 版本中验证工作没有任何问题...

【问题讨论】:

    标签: hibernate validation spring-mvc annotations


    【解决方案1】:

    Hibernate Validator 对 JPA 有一个可选的依赖项,但是当 JPA 存在于类路径中时,Hibernate Validator 4 要求它是 JPA 2.0。在您的情况下,您的类路径中有 JPA 1.0。

    换句话说,Hibernate Validator 4 与 Hibernate 3.5 或更高版本兼容。对于旧版本的 Hibernate,请参阅Hibernate Compatibility Matrix

    【讨论】:

    • 感谢您的快速响应,非常感谢。我是 Spring 和 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 语句,其中之一是: INFO : org.hibernate.cfg.Environment - hibernate.properties 未找到。有没有设置休眠的新方法?我也可以看到许多这样的 INFO 行: INFO : ...DefaultAnnotationHandlerMapping - 将 URL 路径 [/productgroups/] 映射到处理程序 'productGroupController'
    • @axtavt:我试图让 3.6.1-Final 工作,但我一直得到这个:[WARN] org.hibernate:hibernate-core:jar:3.6.1-Final 的 POM 是缺少,没有可用的依赖信息缺少工件 org.hibernate:hibernate-core:jar:3.6.1-Final:compile 不知道该怎么做...
    • @axtavt: 改回 hibernate-core 3.5.5-Final 但现在我得到:[WARN] org.springframework:spring-webmvc:jar:3.0.4.RELEASE 的 POM 无效,传递依赖项(如果有)将不可用,启用调试日志以获取更多详细信息 我说这令人沮丧吗?无论如何,我不想成为一个痛苦的人,我只是想让你知道我一直在尝试自己解决这个问题......有什么想法吗?
    猜你喜欢
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2014-12-01
    • 2015-05-01
    • 1970-01-01
    相关资源
    最近更新 更多