From f50f3d2405a0b7c24a3a8bbd7e89c0482af78e7b Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sun, 27 Nov 2011 23:50:37 +0000 Subject: [PATCH] HibernateJpaDialect does NOT expose underlying Session for underlying SessionFactory anymore (SPR-8771) --- .../orm/jpa/vendor/HibernateJpaDialect.java | 27 ++----------------- 1 file changed, 2 insertions(+), 25 deletions(-) diff --git a/org.springframework.orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java b/org.springframework.orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java index bcf90d8bc86..c3cda31f446 100644 --- a/org.springframework.orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java +++ b/org.springframework.orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java @@ -20,15 +20,12 @@ import java.lang.reflect.Method; import java.sql.Connection; import java.sql.SQLException; import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceException; import org.hibernate.FlushMode; import org.hibernate.HibernateException; import org.hibernate.Session; -import org.hibernate.SessionFactory; import org.hibernate.ejb.HibernateEntityManager; -import org.hibernate.ejb.HibernateEntityManagerFactory; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.datasource.ConnectionHandle; @@ -38,8 +35,6 @@ import org.springframework.orm.jpa.DefaultJpaDialect; import org.springframework.orm.jpa.EntityManagerFactoryUtils; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionException; -import org.springframework.transaction.support.TransactionSynchronizationManager; -import org.springframework.util.ClassUtils; import org.springframework.util.ReflectionUtils; /** @@ -54,10 +49,6 @@ import org.springframework.util.ReflectionUtils; */ public class HibernateJpaDialect extends DefaultJpaDialect { - private static final Method getEntityManagerFactoryMethod = - ClassUtils.getMethodIfAvailable(EntityManager.class, "getEntityManagerFactory"); - - @Override public Object beginTransaction(EntityManager entityManager, TransactionDefinition definition) throws PersistenceException, SQLException, TransactionException { @@ -88,22 +79,12 @@ public class HibernateJpaDialect extends DefaultJpaDialect { previousFlushMode = flushMode; } } - if (getEntityManagerFactoryMethod != null) { - // We're on JPA 2.0, enabling our exposure of the underlying Session - // to the underlying SessionFactory as transaction resource reference. - EntityManagerFactory emf = - (EntityManagerFactory) ReflectionUtils.invokeMethod(getEntityManagerFactoryMethod, entityManager); - if (emf instanceof HibernateEntityManagerFactory) { - SessionFactory sf = ((HibernateEntityManagerFactory) emf).getSessionFactory(); - TransactionSynchronizationManager.bindResource(sf, session); - } - } return new SessionTransactionData(session, previousFlushMode); } @Override public void cleanupTransaction(Object transactionData) { - ((SessionTransactionData) transactionData).cleanup(); + ((SessionTransactionData) transactionData).resetFlushMode(); } @Override @@ -153,11 +134,7 @@ public class HibernateJpaDialect extends DefaultJpaDialect { this.previousFlushMode = previousFlushMode; } - public void cleanup() { - SessionFactory sessionFactory = this.session.getSessionFactory(); - if (TransactionSynchronizationManager.hasResource(sessionFactory)) { - TransactionSynchronizationManager.unbindResource(sessionFactory); - } + public void resetFlushMode() { if (this.previousFlushMode != null) { this.session.setFlushMode(this.previousFlushMode); }