天天看點

@Query與@Modifying執行更新操作

@Query與@Modifying執行更新操作

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

@Query與@Modifying執行更新操作

這個注解是通知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 的 調用,并在相應的方法上聲明事務 。