Skip to content

Commit f50f3d2

Browse files
committed
HibernateJpaDialect does NOT expose underlying Session for underlying SessionFactory anymore (SPR-8771)
1 parent 16933a5 commit f50f3d2

File tree

1 file changed

+2
-25
lines changed

1 file changed

+2
-25
lines changed

org.springframework.orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,12 @@
2020
import java.sql.Connection;
2121
import java.sql.SQLException;
2222
import javax.persistence.EntityManager;
23-
import javax.persistence.EntityManagerFactory;
2423
import javax.persistence.PersistenceException;
2524

2625
import org.hibernate.FlushMode;
2726
import org.hibernate.HibernateException;
2827
import org.hibernate.Session;
29-
import org.hibernate.SessionFactory;
3028
import org.hibernate.ejb.HibernateEntityManager;
31-
import org.hibernate.ejb.HibernateEntityManagerFactory;
3229

3330
import org.springframework.dao.DataAccessException;
3431
import org.springframework.jdbc.datasource.ConnectionHandle;
@@ -38,8 +35,6 @@
3835
import org.springframework.orm.jpa.EntityManagerFactoryUtils;
3936
import org.springframework.transaction.TransactionDefinition;
4037
import org.springframework.transaction.TransactionException;
41-
import org.springframework.transaction.support.TransactionSynchronizationManager;
42-
import org.springframework.util.ClassUtils;
4338
import org.springframework.util.ReflectionUtils;
4439

4540
/**
@@ -54,10 +49,6 @@
5449
*/
5550
public class HibernateJpaDialect extends DefaultJpaDialect {
5651

57-
private static final Method getEntityManagerFactoryMethod =
58-
ClassUtils.getMethodIfAvailable(EntityManager.class, "getEntityManagerFactory");
59-
60-
6152
@Override
6253
public Object beginTransaction(EntityManager entityManager, TransactionDefinition definition)
6354
throws PersistenceException, SQLException, TransactionException {
@@ -88,22 +79,12 @@ public Object prepareTransaction(EntityManager entityManager, boolean readOnly,
8879
previousFlushMode = flushMode;
8980
}
9081
}
91-
if (getEntityManagerFactoryMethod != null) {
92-
// We're on JPA 2.0, enabling our exposure of the underlying Session
93-
// to the underlying SessionFactory as transaction resource reference.
94-
EntityManagerFactory emf =
95-
(EntityManagerFactory) ReflectionUtils.invokeMethod(getEntityManagerFactoryMethod, entityManager);
96-
if (emf instanceof HibernateEntityManagerFactory) {
97-
SessionFactory sf = ((HibernateEntityManagerFactory) emf).getSessionFactory();
98-
TransactionSynchronizationManager.bindResource(sf, session);
99-
}
100-
}
10182
return new SessionTransactionData(session, previousFlushMode);
10283
}
10384

10485
@Override
10586
public void cleanupTransaction(Object transactionData) {
106-
((SessionTransactionData) transactionData).cleanup();
87+
((SessionTransactionData) transactionData).resetFlushMode();
10788
}
10889

10990
@Override
@@ -153,11 +134,7 @@ public SessionTransactionData(Session session, FlushMode previousFlushMode) {
153134
this.previousFlushMode = previousFlushMode;
154135
}
155136

156-
public void cleanup() {
157-
SessionFactory sessionFactory = this.session.getSessionFactory();
158-
if (TransactionSynchronizationManager.hasResource(sessionFactory)) {
159-
TransactionSynchronizationManager.unbindResource(sessionFactory);
160-
}
137+
public void resetFlushMode() {
161138
if (this.previousFlushMode != null) {
162139
this.session.setFlushMode(this.previousFlushMode);
163140
}

0 commit comments

Comments
 (0)