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.TransactionException;
|
||||
import org.springframework.transaction.support.TransactionSynchronizationManager;
|
||||
import org.springframework.util.ClassUtils;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
|
||||
/**
|
||||
|
|
@ -53,6 +54,10 @@ 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 {
|
||||
|
|
@ -83,10 +88,15 @@ public class HibernateJpaDialect extends DefaultJpaDialect {
|
|||
previousFlushMode = flushMode;
|
||||
}
|
||||
}
|
||||
EntityManagerFactory emf = entityManager.getEntityManagerFactory();
|
||||
if (emf instanceof HibernateEntityManagerFactory) {
|
||||
SessionFactory sf = ((HibernateEntityManagerFactory) emf).getSessionFactory();
|
||||
TransactionSynchronizationManager.bindResource(sf, session);
|
||||
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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue