解决Websphere8.5.5上使用jpa2.1报错
解决Websphere8.5.5上使用jpa2.1报错
1.添加两个 jar包
hibernate-entitymanager-4.3.11.Final.jar //jpa2.1
portal-kernel-5.2.3.jar //用于在HibernatePersistenceProviderResolver类中判断当前容器是否为tomcat
2. 在SessionFactory配置中,给hibernate properties配置中添加以下配置(注意,这两个配置只能在webSphere用,如果跑在tomcat中需要把这两个配置注释掉,不然会报错)
```
<prop key="hibernate.transaction.jta.platform">org.hibernate.service.jta.platform.internal.WebSphereExtendedJtaPlatform</prop>
<prop key="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.WebSphereExtendedJTATransactionLookup</prop>
```
-
创建HibernatePersistenceProviderResolver类,并确保能被spring扫描到。
package cn.com.agree.aweb.hibernate.dao.support; import org.hibernate.jpa.HibernatePersistenceProvider; import org.springframework.context.annotation.Configuration; import com.liferay.portal.kernel.util.ServerDetector; import javax.annotation.PostConstruct; import javax.persistence.spi.PersistenceProvider; import javax.persistence.spi.PersistenceProviderResolver; import javax.persistence.spi.PersistenceProviderResolverHolder; import java.util.Collections; import java.util.List; /** * This allows to deploy upgraded JPA and Hibernate versions to Websphere 8.5.5.x servers. * Has been used successfully with JPA 2.1 and Hibernate 4.3.11 * * Mostly a copy of <a href="https://hibernate.atlassian.net/browse/JPA-4">https://hibernate.atlassian.net/browse/JPA-4</a> * Changes made to deploy in a Spring environment. * * To use: add a @DependsOn("hibernatePersistenceProviderResolver") annotation on a DatabaseConfig class */ @Configuration public class HibernatePersistenceProviderResolver implements PersistenceProviderResolver { private volatile PersistenceProvider persistenceProvider = new HibernatePersistenceProvider(); @Override public List<PersistenceProvider> getPersistenceProviders() { return Collections.singletonList(persistenceProvider); } @Override public void clearCachedProviders() { persistenceProvider = new HibernatePersistenceProvider(); } @PostConstruct public void register() { if(ServerDetector.isTomcat()){ return; } PersistenceProviderResolverHolder.setPersistenceProviderResolver(new HibernatePersistenceProviderResolver()); } }
-
应用打成war,部署到webSphere上
-
修改类加载顺序为parent last