私はUser
エンティティとRole
エンティティを持っています。関係は次のように定義されます:SpringデータJPAネイティブクエリ例外例外の削除
ここで、役割を削除すると、その役割を持つすべてのユーザーから役割を削除する必要があります。通常、このロールを持つすべてのユーザーを検索し、リストからロールを削除し、ユーザーを保存することで、このような処理を行います。しかし、100万人を超えるユーザーがいる可能性がある場合、私はアプリ内のこの多くのエンティティをループしたくありません。だから、ネイティブクエリを使用してUSER_ROLES
ジョインテーブルから行を削除したいです。私は自分のリポジトリにこれを追加してみました:
@Query(value="DELETE FROM user_roles WHERE role_id = ?1", nativeQuery=true)
public void deleteRoleFromUsersWithRole(Long roleId);
をしかし、私はこれを行うとき、私は、ログに次を参照してください。
[EL Fine]: sql: 2013-11-02 14:27:14.418--ClientSession(707349235)--Connection(2096606500)--Thread(Thread[http-bio-8080-exec-4,5,main])--DELETE FROM user_roles WHERE role_id = ?
bind => [1000110139999999953]
[EL Fine]: sql: 2013-11-02 14:27:14.478--ClientSession(707349235)--Thread(Thread[http-bio-8080-exec-4,5,main])--SELECT 1
[EL Warning]: 2013-11-02 14:27:14.482--UnitOfWork(1795045370)--Thread(Thread[http-bio-8080-exec-4,5,main])--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.1.v20121003-ad44345): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: No results were returned by the query.
Error Code: 0
Call: DELETE FROM user_roles WHERE role_id = ?
bind => [1000110139999999953]
Query: DataReadQuery(sql="DELETE FROM user_roles WHERE role_id = ?")
私はNo results were returned by the query.
が言っているのか理解していません。レコードはデータベースから削除されますが、この例外はすべてを吹き飛ばす原因となります。
ここで間違っていることを教えてもらえますか?
ああ、私はまだSpring DataとJPAでかなり新しいです。私はドキュメントにもっと時間を費やすべきだと思う。私はそれを働かせるために '@ Transactional'アノテーションを追加しなければならないことに注意してください。ご協力いただきありがとうございます。 – dnc253