【问题标题】:Websphere JPA Persistence is incompatible with default PersistenceProviderWebsphere JPA Persistence 与默认 PersistenceProvider 不兼容
【发布时间】:2015-09-30 15:01:50
【问题描述】:

我收到以下错误

  [9/29/15 21:06:33:816 IST] 0000003f JPAPUnitInfo  E   CWWJP0015E: An error  occurred in the 
org.hibernate.ejb.HibernatePersistence persistence provider when it attempted  to create the
container entity manager factory for the rga-hibernate-jpa persistence unit. 
The following error occurred: 
java.lang.ClassCastException: org.hibernate.ejb.HibernatePersistence 
incompatible with javax.persistence.spi.PersistenceProvider.

很多人都遇到过这个问题。 1.this,2.this,3.and this

我浏览了上述链接和其他一些论坛中提供的答案。常见的建议是删除 JPA 2.0 jar(我不能这样做)并将类加载器作为最后一个父级。

除此之外还有什么解决办法吗?就像在我的 persistence.xml 中定义一些属性一样。

我的 websphere 版本是 8.5.5.2。

In my persistence.xml    
<provider>org.hibernate.ejb.HibernatePersistence</provider>

====================更新=======================

我的依赖是:

【问题讨论】:

  • 问题不在于持久性单元,而在于 JPA jar 的打包以及容器如何加载它们。您的 JPA 2.0 jar 打包在哪里?它可能需要由容器或通过共享库加载,而不是部署在应用程序本身中。
  • 我的 hibernate-jpa-2.0 jar 随 EAR 文件一起提供。我无法控制从 EAR 中删除任何罐子。
  • 您可以随时解压缩耳朵并取出罐子进行测试。

标签: jpa websphere websphere-8


【解决方案1】:

如您引用的其他帖子中所述,基本问题是您的系统中有多个 javax.persistence API 副本。最有可能的是,您的应用程序中有一个(连同 Hibernate impl)和 WebSphere Application Server 提供的一个。由于修改 WebSphere 几乎是不可能的,所以我建议探索删除 Hibernate JPA API jar 文件。

现在您需要注意此问题的另一个方面...您没有提及您尝试使用哪个版本的 Hibernate 或哪个版本的 JPA。但是,WebSphere v8.5.5.2 仅限于 JPA 2.0。如果您尝试使用符合 JPA 2.1 的 Hibernate(或 EclipseLink 甚至 OpenJPA)版本,那么它不会起作用。您将立即遇到类加载问题。而且,没有解决方法。至少不是容器管理的持久性。您可能能够通过 JPA 2.1 提供程序获得应用程序管理的持久性,但您将受到可用功能的限制。

【讨论】:

  • 如您所见,我也在使用 JPA 2.0。
  • 好。现在我看到了更新,因为您正在使用 JPA 2.0。但是,您仍然很可能遇到我在第一段中提到的类加载器冲突。您是否尝试过删除休眠 JPA 2.0 API jar 文件?
  • 我将答案标记为可接受。对于将来遇到同样问题的人:尝试将应用程序标记为 Parent Last Loader 并查看上面提供的答案。
猜你喜欢
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多