I have been trying this:
@Transactional(isolation=Isolation.SERIALIZABLE,
rollbackFor={Exception.class},
propagation=Propagation.REQUIRES_NEW)
on my service methods, but spring complains saying:
Standard JPA does not support custom isolation levels - use a special JpaDialect
How can I resolve this?
This implementation is not account for the clean up stuff, I have implemented a similar solution but that accounts for the clean up as well. That solution can be found here: http://shahzad-mughal.blogspot.com/2012/04/spring-jpa-hibernate-support-for-custom.html
No custom isolation levels are supported by JPA. You can extend the HibernateJpaDialect
class and override connection-related methods so that you can set custom isolation levels on the Connection
Here's something that I've written, but have not tested yet:
public class HibernateExtendedJpaDialect extends HibernateJpaDialect {
@Override
public Object beginTransaction(EntityManager entityManager,
TransactionDefinition definition) throws PersistenceException,
SQLException, TransactionException {
Session session = (Session) entityManager.getDelegate();
DataSourceUtils.prepareConnectionForTransaction(session.connection(), definition);
entityManager.getTransaction().begin();
return prepareTransaction(entityManager, definition.isReadOnly(), definition.getName());
}
}
And you define this as a property of your EntityManagerFactory
:
<property name="jpaDialect">
<bean class="com.company.util.HibernateExtendedJpaDialect" />
</property>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With