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.Connection;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import javax.persistence.EntityManager;
|
import javax.persistence.EntityManager;
|
||||||
import javax.persistence.EntityManagerFactory;
|
|
||||||
import javax.persistence.PersistenceException;
|
import javax.persistence.PersistenceException;
|
||||||
|
|
||||||
import org.hibernate.FlushMode;
|
import org.hibernate.FlushMode;
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
import org.hibernate.SessionFactory;
|
|
||||||
import org.hibernate.ejb.HibernateEntityManager;
|
import org.hibernate.ejb.HibernateEntityManager;
|
||||||
import org.hibernate.ejb.HibernateEntityManagerFactory;
|
|
||||||
|
|
||||||
import org.springframework.dao.DataAccessException;
|
import org.springframework.dao.DataAccessException;
|
||||||
import org.springframework.jdbc.datasource.ConnectionHandle;
|
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.orm.jpa.EntityManagerFactoryUtils;
|
||||||
import org.springframework.transaction.TransactionDefinition;
|
import org.springframework.transaction.TransactionDefinition;
|
||||||
import org.springframework.transaction.TransactionException;
|
import org.springframework.transaction.TransactionException;
|
||||||
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
|
||||||
import org.springframework.util.ClassUtils;
|
|
||||||
import org.springframework.util.ReflectionUtils;
|
import org.springframework.util.ReflectionUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -54,10 +49,6 @@ import org.springframework.util.ReflectionUtils;
|
||||||
*/
|
*/
|
||||||
public class HibernateJpaDialect extends DefaultJpaDialect {
|
public class HibernateJpaDialect extends DefaultJpaDialect {
|
||||||
|
|
||||||
private static final Method getEntityManagerFactoryMethod =
|
|
||||||
ClassUtils.getMethodIfAvailable(EntityManager.class, "getEntityManagerFactory");
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object beginTransaction(EntityManager entityManager, TransactionDefinition definition)
|
public Object beginTransaction(EntityManager entityManager, TransactionDefinition definition)
|
||||||
throws PersistenceException, SQLException, TransactionException {
|
throws PersistenceException, SQLException, TransactionException {
|
||||||
|
|
@ -88,22 +79,12 @@ public class HibernateJpaDialect extends DefaultJpaDialect {
|
||||||
previousFlushMode = flushMode;
|
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);
|
return new SessionTransactionData(session, previousFlushMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void cleanupTransaction(Object transactionData) {
|
public void cleanupTransaction(Object transactionData) {
|
||||||
((SessionTransactionData) transactionData).cleanup();
|
((SessionTransactionData) transactionData).resetFlushMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -153,11 +134,7 @@ public class HibernateJpaDialect extends DefaultJpaDialect {
|
||||||
this.previousFlushMode = previousFlushMode;
|
this.previousFlushMode = previousFlushMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cleanup() {
|
public void resetFlushMode() {
|
||||||
SessionFactory sessionFactory = this.session.getSessionFactory();
|
|
||||||
if (TransactionSynchronizationManager.hasResource(sessionFactory)) {
|
|
||||||
TransactionSynchronizationManager.unbindResource(sessionFactory);
|
|
||||||
}
|
|
||||||
if (this.previousFlushMode != null) {
|
if (this.previousFlushMode != null) {
|
||||||
this.session.setFlushMode(this.previousFlushMode);
|
this.session.setFlushMode(this.previousFlushMode);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue