Springboot 1.5.7 / SpringDataJPA - 为什么存储库中的方法默认不是所有事务性的

时间:2017-11-10 16:17:23

标签: spring spring-boot spring-data-jpa transactional

我的存储库中的代码:

public interface ClientRepository extends CrudRepository<Client, Long> {

//@Transactional
@Modifying
@Query("update Client c set c.firstName = ?1, c.lastName = ?2, c.email = ?3 where c.id = ?4")
void updateClientInfoById(String firstname, String lastname, String email, Long userId);

使用REST服务执行此方法(updateClientInfoById)会给出以下异常:javax.persistence.TransactionRequiredException:执行更新/删除查询

我必须添加@Transactional以使其正常工作。

为什么存储库中的方法默认不是所有事务性的?

提前致谢:)

1 个答案:

答案 0 :(得分:1)

默认情况下,只有CRUD方法标记为事务性方法。您正在使用自定义查询方法,因此应使用@Transactional注释明确标记它。

  

此外,我们可以删除@Transactional注释   方法作为Spring Data JPA存储库的CRUD方法   实现已经使用@Transactional注释。

有关更多信息,请参阅Getting started with Spring Data JPA

编辑:CRUD方法是CrudRepository方法