avoid hard JPA 2.0 dependency
This commit is contained in:
parent
6aaf7fefde
commit
3032b214c6
|
|
@ -39,6 +39,7 @@ 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.transaction.support.TransactionSynchronizationManager;
|
||||||
|
import org.springframework.util.ClassUtils;
|
||||||
import org.springframework.util.ReflectionUtils;
|
import org.springframework.util.ReflectionUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -53,6 +54,10 @@ 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 {
|
||||||
|
|
@ -83,10 +88,15 @@ public class HibernateJpaDialect extends DefaultJpaDialect {
|
||||||
previousFlushMode = flushMode;
|
previousFlushMode = flushMode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EntityManagerFactory emf = entityManager.getEntityManagerFactory();
|
if (getEntityManagerFactoryMethod != null) {
|
||||||
if (emf instanceof HibernateEntityManagerFactory) {
|
// We're on JPA 2.0, enabling our exposure of the underlying Session
|
||||||
SessionFactory sf = ((HibernateEntityManagerFactory) emf).getSessionFactory();
|
// to the underlying SessionFactory as transaction resource reference.
|
||||||
TransactionSynchronizationManager.bindResource(sf, session);
|
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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue