关于PROPAGATION_REQUIRES_NEW和PROPAGATION_NESTED事务的比较
最近在用spring-data-jpa做事务处理时,由于两个事务都处理了同一个表,其中一个事务加锁,另外一个事务不加锁,于是在调用的另外一个事务中使用了嵌套的方式,但是运行却报 JpaDialect does not support savepoints - check your JPA provider's capabilities 后经查实,原来Hibernate/JPA并不能实现嵌套事务,嵌套事务仅仅在JDBC级别支持,对于Hibernate/JPA要实现嵌套事务,也仅仅在dialect为Oracle的情况下才完全实现。 那怎么办?那当然是使用JDBC事务控制咯,因此你可以使用JdbcTemplate或者mybatis数据库框架进行控制。 <tx:annotation-driven transaction-manager="transactionManager"/> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> 这个时候,只需要在方法上添加 @Transactional(propagation=Propagation.NESTED