HibernateJpaDialect does NOT expose underlying Session for underlying SessionFactory anymore (SPR-8771)
This commit is contained in:
parent
16933a511d
commit
f50f3d2405
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue