最近在做項目時,使用的Springboot jpa ,使用原生SQL方法實現數據更新時,運行時的報錯信息如下:
org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query
因爲jpa要求,’沒有事務支持,不能執行更新和刪除操作’。
遇到如上情況“執行一個更新/刪除查詢”後面報錯“javax的持久類的事務需求異常”通常情況下講,是沒有書寫事務,就是在Service層或者Repository層上必須加@Transactional,來代表這是一個事務級別的操作,增刪改查除了查都是事務級別的,就當這是一個規範也是ok的。在查詢過程中因爲不涉及到對於數據庫的操作,所以可以不聲明事務也能執行。
@Transactional
@Query(value="update User u set u.shareopenid = ?1 where u.id = ?2")
@Modifying
public int updateShareOpenidById(String shareOpenid,Long id);