Spring 引导 1.2.5.RELEASE @Transaction

Spring Boot 1.2.5.RELEASE @Transaction

升级到 spring boot 1.2.5 后,尝试执行以下查询时抛出异常。

原因:javax.persistence.TransactionRequiredException:正在执行 update/delete 查询

@Modifying
@Transactional
@Query(value = "insert into some_table (some_id) VALUES (?1)", nativeQuery = true)
public void insertSomeTable(long some_id);

好像@Transactional 注释被忽略了。使用 spring boot 1.2.1 这可行。有什么想法吗?

tl;博士

您显然正在使用 JTA 1.2 的 @javax.transaction.Transactional,不幸的是,在引导版本包含的 Spring 数据版本中,对它的支持被破坏了。解决方法是使用 Spring 框架的 @org.springframework.transaction.Transactional.

详情

Spring 数据版本包含在 Spring 引导版本中,修复了之前存在的事务错误。这实际上 "fixes" 存储库上的事务处理由 Spring 数据控制。

不幸的是,您显然正在使用的对 JTA 1.2 @Transactional 的支持切换。我已修复 DATACMNS-732 (to bei included in Fowler SR2 and Gosling RC1) and created a ticket in Spring Framework 以改进库中的场景(由于需要复制 class,我们基本上没有获得 JTA 1.2 支持)。