Works by

Ren's blog

@rennnosuke_rk 技術ブログです

【Spring Data JPA】@Queryによる更新/削除クエリには@Modifingアノテーションを付加する

TD;DR

Spring Data JPAのRepositoryに@Queryで更新/削除クエリを定義するとき、@Modifingアノテーションを付加します。

@Modifing
@Transactional
@Query(value = "DELETE FROM PHOTO AS p WHERE p.USER_ID = :userId", nativeQuery = true)
public void deletePhoto(@Param("userId") int userId);

@Queryによる更新系操作

@Queryを使ってSpringのRepositoryに更新系操作を定義するとき、以下のようなエラーが出現します。

SQLException: Can not issue data manipulation statements with executeQuery().

データ更新系操作をしている間は、 executeQuery() を呼べないと怒られてしまいます。おそらく内部でJDBCexecuteQuery() が呼ばれているものと思われます。

これを回避するには、上述の @Modifing アノテーションを付加します。

@Modifing
@Transactional
@Query(value = "DELETE FROM PHOTO AS p WHERE p.USER_ID = :userId", nativeQuery = true)
public void deletePhoto(@Param("userId") int userId);

以上です。