Springboot 1.5.7/SpringDataJPA-为什么存储库中的方法在默认情况下并不都是事务性的



我的存储库中的这段代码:

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才能使其工作。

为什么存储库中的方法在默认情况下并不都是事务性的?

提前感谢:)

默认情况下,只有CRUD方法被标记为事务性方法。您使用的是自定义查询方法,因此应该使用@Transactional注释显式标记它。

此外,我们可以取消方法作为Spring Data JPA存储库的CRUD方法实现已经用@Transactional进行了注释。

有关更多信息,请参阅Spring Data JPA 入门

编辑:CRUD方法是CrudRepository方法

最新更新