@Query與@Modifying執行更新操作
@Query 與 @ Modifying 這 兩 個 annotation 一起聲明,可定義個性化更新操作,例如隻涉及某些字段更新時最為常用,示例如下:

這個注解是通知jpa,這是一個update或者delete操作,在更新或者删除操作時,此注解必須加,否則會抛出下面異常
org.springframework.dao.InvalidDataAccessApiUsageException
@Modifying //通知jpa這是一個update或者delete操作,jpql不支援insert操作
@Query("update Account set name=:name, money=:money,version=:version+1 where id=:id and version=:version")
int updateAccountByVersion(@Param("id") int id,@Param("name") String name, @Param("money") double money,@Param("version") int version);
必須加事務,不加事務,會報下面錯
org.springframework.dao.InvalidDataAccessApiUsageException
• 注意:
– 方法 的傳回值應該 是 int ,表示更新語句所影響的行數
– 在 調用的地方必須加事務,沒有事務不能正常執行
jpql不支援insert
事務
• Spring Data 提供 了預設的事務處理方式,即 所有的查詢均聲明為隻讀 事務 。
• 對于自定義的方法,如需 改變 S pringData 提供 的事務預設方式,可以在方法上 注解 @Transactional 聲明
• 進行多 個 Repository 操作 時,也應該使它們在同一個事務中處理,按照分層架構的思想,這部分屬于業務邏輯層,是以, 需要 在 Service 層 實作對多 個 Repository 的 調用,并在相應的方法上聲明事務 。