When using Hibernate 5.2 and using an unwrapped (or cast) SessionFactory to get the current session using getCurrentSession this doesn't get synchronized with the current transaction.
This is mainly due to the change in Hibernate 5.2 that Session now extends EntityManager which will create an unsynchronized EntityManager leading to an exception when the transaction will commit.
This all happens in the invokeProxyMethod in the AbstractEntityManagerFactoryBean. I guess that method should also treat the getCurrentSession method like it does the createEntityManager method with SynchronizationType.SYNCHRONIZED is used.
NOTE: This only happens with Hibernate 5.2 (or up) with lower versions there (probably) isn't an issue as there Session doesn't extend EntityManager.
Affects: 4.3.17, 5.0.6
#21540 LocalSessionFactoryBean and HibernateTransactionManager for JPA EntityManagerFactory setup
The text was updated successfully, but these errors were encountered:
From my current perspective, SessionFactory.getCurrentSession() is not a supported feature with a plain JPA setup. Adding support for it to our general JPA setup classes would hard-code Hibernate specifics into it, and adding dedicated support for it to the JpaVendorAdapter abstraction is quite a bit of hassle.
As outlined in #21494, I'm rather keen on the use of LocalSessionFactoryBean even for JPA EntityManagerFactory setup... in particular for a mix of native Hibernate and standard JPA access. If there are any issues with that kind of setup, I'd definitely consider fine-tuning that area for Spring Framework 5.1 still.