我的存储库中的代码:
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以使其正常工作。
为什么存储库中的方法默认不是所有事务性的?
提前致谢:)
答案 0 :(得分:1)
默认情况下,只有CRUD方法标记为事务性方法。您正在使用自定义查询方法,因此应使用@Transactional
注释明确标记它。
此外,我们可以删除@Transactional注释 方法作为Spring Data JPA存储库的CRUD方法 实现已经使用@Transactional注释。
有关更多信息,请参阅Getting started with Spring Data JPA
编辑:CRUD方法是CrudRepository
方法