この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:1
ページ更新者:guest
更新日時:2019-04-08 10:33:39

タイトル: @Modifying
SEOタイトル: 【Spring】@Modifyingアノテーションとは

この記事の要点
  • @Modifying は Spring Data JPA でINSERT / UPDATE / DELETE クエリに付与するアノテーション
  • 必ず @Queryセットで使う(SELECT クエリには不要)
  • @Transactional を併用しないと実行時エラーになることが多い
  • 対象: UPDATE table SET ... WHERE ... 等の更新系 JPQL

 

本稿はSpringFrameworkの@Modifyingについて説明します。

 

@Modifyingとは

@ModifyingはJpaRepositoryの更新系メソッドに付与するアノテーション。

@Queryアノテーションとセットで使用する。

以下、実装例。

@Repository
public interface TestRepository extends JpaRepository<TestEntity, String>{
    
    @Transactional

    @Modifying
    @Query("UPDATE TestEntity te SET te.colA = 1 WHERE te.id = :id")
    Integer updateTest(@Param("id")String id);
}

 

更新系メソッドに当アノテーションを付与しないと更新時に以下のエラーが発生する。

Caused by: java.lang.RuntimeException: org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [UPDATE ... ]; 
nested exception is java.lang.IllegalStateException: org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [UPDATE ... ]