import org.hibernate.jpa.HibernatePersistenceProvider; import org.springframework.context.annotation.Configuration; 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 https://hibernate.atlassian.net/browse/JPA-4 * 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 getPersistenceProviders() { return Collections.singletonList(persistenceProvider); } @Override public void clearCachedProviders() { persistenceProvider = new HibernatePersistenceProvider(); } @PostConstruct public void register() { PersistenceProviderResolverHolder.setPersistenceProviderResolver(new HibernatePersistenceProviderResolver()); } }