我的存储库中的这段代码:
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
方法