エラーが発生していますNot supported for DML operations
次のHQLを使用する場合...
@Query("UPDATE WorkstationEntity w SET w.lastActivity = :timestamp WHERE w.uuid = :uuid")
void updateLastActivity(@Param("uuid") String uuid, @Param("timestamp") Timestamp timestamp);
問題の原因は何ですか? Googleで見つけたいくつかの結果を考えると、これは一般的なエラーではないようです。
Hibernate usersフォーラムの投稿 hibernate hql ERROR:Not supported for DML operations を確認してください。
おそらくあなたは電話した
querySt.list();
UPDATE
クエリ用。代わりに呼び出す必要があります
querySt.executeUpdate();
私もアノテーションで同じ問題を抱えていました。検索していくつかのトリックを実行した後、私はそれを解決することができました。 JPAでDML操作を使用しているときに確認する必要がある手順がいくつかあります。
必要なメソッドでアノテーション@Modifying(org.springframework.data.jpa.repository.Modifying)および@Transactional(org.springframework.transaction.annotation.Transactional)を使用します。
メソッドの戻り値の型としてvoidを使用します。
例えば:-
@Modifying
@Query( "UPDATE ProcedureDTO o SET o.isSelectedByUser =?1")
@Transactional
public void getListOfProcedureBasedOnSelection(Boolean isSelected);
updateLastActivity
を呼び出すサービスクラスメソッドに@Transactional(org.springframework.transaction.annotation.Transactional)
アノテーションがあることを確認してください。リポジトリのメソッドを以下に変更します。
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
...
@Modifying
@Query("UPDATE WorkstationEntity w SET w.lastActivity = :timestamp WHERE w.uuid = :uuid")
void updateLastActivity(@Param("uuid") String uuid, @Param("timestamp") Timestamp timestamp);
詳細については、 この回答 を使用してください。
同じことが起こったのは、クラスQueryのオブジェクトqであるため、q.list()は更新または削除に使用されるのではなく、q.executeUpdate()