From c9641ffe4fd515f0571e430f1f96e04b017804b4 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 3 Apr 2017 17:50:25 +0200 Subject: [PATCH] DATAJPA-1085 - Upgraded Hibernate baseline to 5.2. Removed build profiles for older Hibernate versions, Travis build setup for those. Removed reflection based code paths to support older versions of Hibernate. Removed build profiles for Spring 5 and 4.3 as well. --- .travis.yml | 8 --- pom.xml | 63 +------------------ .../jpa/provider/PersistenceProvider.java | 39 +++--------- .../PersistenceProviderUnitTests.java | 22 +------ 4 files changed, 13 insertions(+), 119 deletions(-) diff --git a/.travis.yml b/.travis.yml index 98ee1f5ef..53e0bcfb7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,15 +6,7 @@ jdk: env: matrix: - PROFILE=ci - - PROFILE=spring43 - - PROFILE=spring43-next - - PROFILE=spring5 - PROFILE=spring5-next - - PROFILE=hibernate-43-next - - PROFILE=hibernate-5 - - PROFILE=hibernate-51 - - PROFILE=hibernate-51-next - - PROFILE=hibernate-52 - PROFILE=hibernate-52-next - PROFILE=eclipselink-next - PROFILE=eclipselink-27-next diff --git a/pom.xml b/pom.xml index dfda68187..d37a3c4ed 100644 --- a/pom.xml +++ b/pom.xml @@ -22,8 +22,7 @@ DATAJPA 2.6.2 - 4.3.11.Final - hibernate-entitymanager + 5.2.9.Final 1.8.0.10 2.0.0 2.4.1 @@ -34,66 +33,10 @@ - - hibernate-43-next - - 4.3.12-SNAPSHOT - - - - jboss - https://repository.jboss.org/nexus/content/repositories/public - - - - - hibernate-5 - - 5.0.10.Final - - - - hibernate-5-next - - 5.0.11-SNAPSHOTS - - - - jboss - https://repository.jboss.org/nexus/content/repositories/public - - - - - hibernate-51 - - 5.1.1.Final - - - - hibernate-51-next - - 5.1.2-SNAPSHOT - - - - jboss - https://repository.jboss.org/nexus/content/repositories/public - - - - - hibernate-52 - - 5.2.7.Final - hibernate-core - - hibernate-52-next - 5.2.8-SNAPSHOT - hibernate-core + 5.2.10-SNAPSHOT @@ -241,7 +184,7 @@ org.hibernate - ${hibernate.artifact} + hibernate-core ${hibernate} true diff --git a/src/main/java/org/springframework/data/jpa/provider/PersistenceProvider.java b/src/main/java/org/springframework/data/jpa/provider/PersistenceProvider.java index 4ed4e69a2..108693bbf 100644 --- a/src/main/java/org/springframework/data/jpa/provider/PersistenceProvider.java +++ b/src/main/java/org/springframework/data/jpa/provider/PersistenceProvider.java @@ -18,7 +18,6 @@ package org.springframework.data.jpa.provider; import static org.springframework.data.jpa.provider.JpaClassUtils.*; import static org.springframework.data.jpa.provider.PersistenceProvider.Constants.*; -import java.lang.reflect.Method; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -44,9 +43,7 @@ import org.hibernate.proxy.HibernateProxy; import org.springframework.data.util.CloseableIterator; import org.springframework.transaction.support.TransactionSynchronizationManager; import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; import org.springframework.util.ConcurrentReferenceHashMap; -import org.springframework.util.ReflectionUtils; /** * Enumeration representing persistence providers to be used. @@ -65,9 +62,8 @@ public enum PersistenceProvider implements QueryExtractor, ProxyIdAccessor { * @see DATAJPA-444 */ HIBERNATE(// - Arrays.asList(HIBERNATE52_ENTITY_MANAGER_INTERFACE, HIBERNATE43_ENTITY_MANAGER_INTERFACE, - HIBERNATE_ENTITY_MANAGER_INTERFACE), // - Arrays.asList(HIBERNATE52_JPA_METAMODEL_TYPE, HIBERNATE43_JPA_METAMODEL_TYPE, HIBERNATE_JPA_METAMODEL_TYPE)) { + Arrays.asList(HIBERNATE_ENTITY_MANAGER_INTERFACE), // + Arrays.asList(HIBERNATE_JPA_METAMODEL_TYPE)) { public String extractQueryString(Query query) { return HibernateUtils.getHibernateQuery(query); @@ -261,13 +257,11 @@ public enum PersistenceProvider implements QueryExtractor, ProxyIdAccessor { String GENERIC_JPA_ENTITY_MANAGER_INTERFACE = "javax.persistence.EntityManager"; String OPENJPA_ENTITY_MANAGER_INTERFACE = "org.apache.openjpa.persistence.OpenJPAEntityManager"; String ECLIPSELINK_ENTITY_MANAGER_INTERFACE = "org.eclipse.persistence.jpa.JpaEntityManager"; - String HIBERNATE_ENTITY_MANAGER_INTERFACE = "org.hibernate.ejb.HibernateEntityManager"; - String HIBERNATE43_ENTITY_MANAGER_INTERFACE = "org.hibernate.jpa.HibernateEntityManager"; - String HIBERNATE52_ENTITY_MANAGER_INTERFACE = "org.hibernate.Session"; + String HIBERNATE_SESSION_INTERFACE = "org.hibernate.Session"; + // needed as Spring only exposes that interface via the EM proxy + String HIBERNATE_ENTITY_MANAGER_INTERFACE = "org.hibernate.jpa.HibernateEntityManager"; - String HIBERNATE_JPA_METAMODEL_TYPE = "org.hibernate.ejb.metamodel.MetamodelImpl"; - String HIBERNATE43_JPA_METAMODEL_TYPE = "org.hibernate.jpa.internal.metamodel.MetamodelImpl"; - String HIBERNATE52_JPA_METAMODEL_TYPE = "org.hibernate.metamodel.internal.MetamodelImpl"; + String HIBERNATE_JPA_METAMODEL_TYPE = "org.hibernate.metamodel.internal.MetamodelImpl"; String ECLIPSELINK_JPA_METAMODEL_TYPE = "org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl"; String OPENJPA_JPA_METAMODEL_TYPE = "org.apache.openjpa.persistence.meta.MetamodelImpl"; } @@ -406,11 +400,6 @@ public enum PersistenceProvider implements QueryExtractor, ProxyIdAccessor { */ private static class HibernateScrollableResultsIterator implements CloseableIterator { - private static final Method READ_ONLY_METHOD = ClassUtils.getMethod(org.hibernate.Query.class, "setReadOnly", - boolean.class); - private static final Method SCROLL_METHOD = ClassUtils.getMethod(READ_ONLY_METHOD.getReturnType(), "scroll", - ScrollMode.class); - private final ScrollableResults scrollableResults; /** @@ -420,19 +409,9 @@ public enum PersistenceProvider implements QueryExtractor, ProxyIdAccessor { */ public HibernateScrollableResultsIterator(Query jpaQuery) { - org.hibernate.Query query = jpaQuery.unwrap(org.hibernate.Query.class); - boolean isReadOnly = TransactionSynchronizationManager.isCurrentTransactionReadOnly(); - - if (READ_ONLY_METHOD.getReturnType().equals(org.hibernate.Query.class)) { - - this.scrollableResults = query.setReadOnly(isReadOnly).scroll(ScrollMode.FORWARD_ONLY); - - } else { - - Object intermediate = ReflectionUtils.invokeMethod(READ_ONLY_METHOD, jpaQuery, isReadOnly); - this.scrollableResults = (ScrollableResults) ReflectionUtils.invokeMethod(SCROLL_METHOD, intermediate, - ScrollMode.FORWARD_ONLY); - } + org.hibernate.query.Query query = jpaQuery.unwrap(org.hibernate.query.Query.class); + this.scrollableResults = query.setReadOnly(TransactionSynchronizationManager.isCurrentTransactionReadOnly())// + .scroll(ScrollMode.FORWARD_ONLY); } /* diff --git a/src/test/java/org/springframework/data/jpa/provider/PersistenceProviderUnitTests.java b/src/test/java/org/springframework/data/jpa/provider/PersistenceProviderUnitTests.java index 7da11970b..eadde71d0 100644 --- a/src/test/java/org/springframework/data/jpa/provider/PersistenceProviderUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/provider/PersistenceProviderUnitTests.java @@ -50,26 +50,6 @@ public class PersistenceProviderUnitTests { this.shadowingClassLoader = new ShadowingClassLoader(getClass().getClassLoader()); } - @Test // DATAJPA-444 - public void detectsHibernatePersistenceProviderForHibernateVersionLessThan4Dot3() throws Exception { - - shadowingClassLoader.excludePackage("org.hibernate"); - - EntityManager em = mockProviderSpecificEntityManagerInterface(HIBERNATE_ENTITY_MANAGER_INTERFACE); - - assertThat(fromEntityManager(em), is(HIBERNATE)); - } - - @Test // DATAJPA-444 - public void detectsHibernatePersistenceProviderForHibernateVersionGreaterEqual4dot3() throws Exception { - - shadowingClassLoader.excludePackage("org.hibernate"); - - EntityManager em = mockProviderSpecificEntityManagerInterface(HIBERNATE43_ENTITY_MANAGER_INTERFACE); - - assertThat(fromEntityManager(em), is(HIBERNATE)); - } - @Test public void detectsOpenJpaPersistenceProvider() throws Exception { @@ -105,7 +85,7 @@ public class PersistenceProviderUnitTests { shadowingClassLoader.excludePackage("org.hibernate"); - EntityManager em = mockProviderSpecificEntityManagerInterface(HIBERNATE52_ENTITY_MANAGER_INTERFACE); + EntityManager em = mockProviderSpecificEntityManagerInterface(HIBERNATE_ENTITY_MANAGER_INTERFACE); assertThat(fromEntityManager(em), is(HIBERNATE)); }