|
20 | 20 | import java.sql.Connection;
|
21 | 21 | import java.sql.SQLException;
|
22 | 22 | import javax.persistence.EntityManager;
|
23 |
| -import javax.persistence.EntityManagerFactory; |
24 | 23 | import javax.persistence.PersistenceException;
|
25 | 24 |
|
26 | 25 | import org.hibernate.FlushMode;
|
27 | 26 | import org.hibernate.HibernateException;
|
28 | 27 | import org.hibernate.Session;
|
29 |
| -import org.hibernate.SessionFactory; |
30 | 28 | import org.hibernate.ejb.HibernateEntityManager;
|
31 |
| -import org.hibernate.ejb.HibernateEntityManagerFactory; |
32 | 29 |
|
33 | 30 | import org.springframework.dao.DataAccessException;
|
34 | 31 | import org.springframework.jdbc.datasource.ConnectionHandle;
|
|
38 | 35 | import org.springframework.orm.jpa.EntityManagerFactoryUtils;
|
39 | 36 | import org.springframework.transaction.TransactionDefinition;
|
40 | 37 | import org.springframework.transaction.TransactionException;
|
41 |
| -import org.springframework.transaction.support.TransactionSynchronizationManager; |
42 |
| -import org.springframework.util.ClassUtils; |
43 | 38 | import org.springframework.util.ReflectionUtils;
|
44 | 39 |
|
45 | 40 | /**
|
|
54 | 49 | */
|
55 | 50 | public class HibernateJpaDialect extends DefaultJpaDialect {
|
56 | 51 |
|
57 |
| - private static final Method getEntityManagerFactoryMethod = |
58 |
| - ClassUtils.getMethodIfAvailable(EntityManager.class, "getEntityManagerFactory"); |
59 |
| - |
60 |
| - |
61 | 52 | @Override
|
62 | 53 | public Object beginTransaction(EntityManager entityManager, TransactionDefinition definition)
|
63 | 54 | throws PersistenceException, SQLException, TransactionException {
|
@@ -88,22 +79,12 @@ public Object prepareTransaction(EntityManager entityManager, boolean readOnly,
|
88 | 79 | previousFlushMode = flushMode;
|
89 | 80 | }
|
90 | 81 | }
|
91 |
| - if (getEntityManagerFactoryMethod != null) { |
92 |
| - // We're on JPA 2.0, enabling our exposure of the underlying Session |
93 |
| - // to the underlying SessionFactory as transaction resource reference. |
94 |
| - EntityManagerFactory emf = |
95 |
| - (EntityManagerFactory) ReflectionUtils.invokeMethod(getEntityManagerFactoryMethod, entityManager); |
96 |
| - if (emf instanceof HibernateEntityManagerFactory) { |
97 |
| - SessionFactory sf = ((HibernateEntityManagerFactory) emf).getSessionFactory(); |
98 |
| - TransactionSynchronizationManager.bindResource(sf, session); |
99 |
| - } |
100 |
| - } |
101 | 82 | return new SessionTransactionData(session, previousFlushMode);
|
102 | 83 | }
|
103 | 84 |
|
104 | 85 | @Override
|
105 | 86 | public void cleanupTransaction(Object transactionData) {
|
106 |
| - ((SessionTransactionData) transactionData).cleanup(); |
| 87 | + ((SessionTransactionData) transactionData).resetFlushMode(); |
107 | 88 | }
|
108 | 89 |
|
109 | 90 | @Override
|
@@ -153,11 +134,7 @@ public SessionTransactionData(Session session, FlushMode previousFlushMode) {
|
153 | 134 | this.previousFlushMode = previousFlushMode;
|
154 | 135 | }
|
155 | 136 |
|
156 |
| - public void cleanup() { |
157 |
| - SessionFactory sessionFactory = this.session.getSessionFactory(); |
158 |
| - if (TransactionSynchronizationManager.hasResource(sessionFactory)) { |
159 |
| - TransactionSynchronizationManager.unbindResource(sessionFactory); |
160 |
| - } |
| 137 | + public void resetFlushMode() { |
161 | 138 | if (this.previousFlushMode != null) {
|
162 | 139 | this.session.setFlushMode(this.previousFlushMode);
|
163 | 140 | }
|
|
0 commit comments