首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证期间的Websphere

验证期间的Websphere
EN

Stack Overflow用户
提问于 2015-12-22 11:39:49
回答 1查看 829关注 0票数 1

结合特性使用Websphere with 8.5.5.7

  • beanValidation-1.1已启用
  • jpa-2.1 禁用

JPA-2.0Hibernate实现正在作为项目依赖项加载,尽管在项目中如此。验证器由Spring框架自动生成,类似于

代码语言:javascript
复制
Validation.byDefaultProvider()
  .configure()
  .buildValidatorFactory()
  .getValidator()

似乎它配置了默认的可遍历解析器,这进一步将工作委托给Jpa可遍历解析器,因为我在类路径中有JPA。但是,当对一个对象进行验证时,由于在ClassNotFoundException: javax/persistence/Persistence中调用这个类的用法,它在org.apache.bval.jsr.resolver.JPATraversableResolver:34中会失败。

似乎是与类加载器相关的WebSphere错误,但也许我应该以其他方式初始化验证?

但是,当我在Websphere中启用jpa-2.1特性时,就没有这样的问题了。

EN

回答 1

Stack Overflow用户

发布于 2015-12-22 16:14:30

这里的问题是,javax.persistence.*是在编译时通过Maven依赖项提供的,但是这不会传递到服务器运行时。

为了将javax.persistence.*提供给服务器运行时,您需要在server.xml中启用jpa-2.0jpa-2.1,或者可以编写提供javax.persistence.*的用户特性。

在您提到的注释中,您不希望在类路径上有两个JPA实现。默认情况下,jpa-2.0将为您提供一个OpenJPA实现,而jpa-2.1将为您提供一个EclipseLink实现。但是,您可以重写它,因此运行时类路径上只有一个JPA实现。由于您正在使用Hibernate,所以仍然可以启用jpa-2.0jpa-2.1并覆盖提供程序,以便在服务器运行时只有一个JPA实现可用。

有关如何将Hibernate设置为自由的JPA提供程序,请参阅本文:

Hibernate JPA示例:使用替代的JPA提供程序

它有一个示例server.xml和web应用程序,包括源代码,可以作为一个很好的例子。

这里的关键是在server.xml中指定这一点。

代码语言:javascript
复制
<jpa defaultPersistenceProvider="org.hibernate.ejb.HibernatePersistence" />

或者,您可以在persistence.xml中指定此

代码语言:javascript
复制
<provider>org.hibernate.ejb.HibernatePersistence</provider>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34415105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档