WebLogic 12c (12.2.1.4) with Hibernate 5.4



我有一个使用 Hibernate 5.2.18 在 WebLogic 12c (12.2.1.4( 上部署的应用程序。Weblogic 12c 文档引用了 JPA 2.1 兼容性,Hibernate 5.3+ 需要 JPA 2.2。我可以将 JPA 2.2 API 附加到我的启动类路径并使用 Hibernate 5.3+ 还是应该暂时使用 Hibernate 5.2?

是的,这种配置是可能的。

要避免与 WebLogic 内置的 JPA 功能发生冲突,您应该执行以下操作:

  1. 据此

在完整的 Java EE 环境中,请考虑从 JNDI 获取EntityManagerFactory。或者,在LocalContainerEntityManagerFactoryBean定义上指定自定义persistenceXmlLocation(例如,META-INF/my-persistence.xml(,并在应用程序 jar 文件中仅包含具有该名称的描述符。因为 Java EE 服务器只查找缺省META-INF/persistence.xml文件,所以它会忽略这种定制的持久性单元,从而避免与 Spring 驱动的 JPA 设置预先发生冲突。

你可以在 spring 上下文配置中使用这样的东西。

<?xml version="1.0" encoding="UTF-8"?>
<beans>
<!-- ... -->
<jee:jndi-lookup id="DS" jndi-name="appDS" />
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath:META-INF/app-persistence.xml" />
<property name="dataSource" ref="DS" />
</bean>
<!-- ... -->
</beans>
  1. 根据这个

若要将FilteringClassLoader配置为指定从应用程序加载某个包,请将prefer-application-packages描述符元素添加到weblogic-application.xml该元素,该元素详细说明要从应用程序加载的包的列表。

您应该将以下代码片段添加到您的META-INF/weblogic-application.xml

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application>
<prefer-application-packages>
<!-- ... -->
<package-name>javax.persistence.*</package-name>
</prefer-application-packages>
</weblogic-application>

最新更新