休眠,弹簧,JPS和隔离 - 不支持自定义隔离

2022-09-01 17:42:39

我一直在尝试这个:

@Transactional(isolation=Isolation.SERIALIZABLE, 
               rollbackFor={Exception.class}, 
               propagation=Propagation.REQUIRES_NEW)

关于我的服务方法,但春天抱怨说:

Standard JPA does not support custom isolation levels - use a special JpaDialect

如何解决此问题?


答案 1

这个实现不是清理的东西,我已经实现了类似的解决方案,但也解释了清理。该解决方案可以在这里找到:http://shahzad-mughal.blogspot.com/2012/04/spring-jpa-hibernate-support-for-custom.html


答案 2

JPA 不支持任何自定义隔离级别。您可以扩展该类并重写与连接相关的方法,以便在HibernateJpaDialectConnection

以下是我写过的东西,但还没有测试过:

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());
    }

}

你把它定义为你的属性:EntityManagerFactory

<property name="jpaDialect">
    <bean class="com.company.util.HibernateExtendedJpaDialect" />
</property>

推荐