【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()
を呼べないと怒られてしまいます。おそらく内部でJDBCの executeQuery()
が呼ばれているものと思われます。
これを回避するには、上述の @Modifing
アノテーションを付加します。
@Modifing @Transactional @Query(value = "DELETE FROM PHOTO AS p WHERE p.USER_ID = :userId", nativeQuery = true) public void deletePhoto(@Param("userId") int userId);
以上です。