Browse Source

HibernateJpaDialect does NOT expose underlying Session for underlying SessionFactory anymore (SPR-8771)

pull/7/head
Juergen Hoeller 14 years ago
parent
commit
f50f3d2405
  1. 27
      org.springframework.orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java

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

@ -20,15 +20,12 @@ import java.lang.reflect.Method; @@ -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; @@ -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; @@ -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 { @@ -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 { @@ -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);
}

Loading…
Cancel
Save