Ich habe eine User
Einheit und eine Role
Einheit. Die Beziehung ist wie folgt definiert:Spring Data JPA löschen native Abfrage werfen Ausnahme
@OneToMany
@JoinTable(name="USER_ROLES", [email protected](name="ROLE_ID"))
private List<Role> roles = null;
Nun, wenn ich eine Rolle löschen, muss ich die Rolle von allen Benutzern löschen, die diese Rolle haben. Normalerweise würden Sie so etwas tun, indem Sie alle Benutzer mit dieser Rolle nachschlagen, die Rolle aus der Liste entfernen und den Benutzer speichern. Wenn es jedoch über eine Million Benutzer geben kann, möchte ich nicht über diese vielen Entitäten in der App hinausgehen. Also möchte ich eine native Abfrage verwenden, um Zeilen aus der Join-Tabelle USER_ROLES
zu entfernen. Ich habe versucht, diese zu meinen Repository:
@Query(value="DELETE FROM user_roles WHERE role_id = ?1", nativeQuery=true)
public void deleteRoleFromUsersWithRole(Long roleId);
Allerdings, wenn ich dies tun, sehe ich die folgenden in den Protokollen:
[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 = ?")
Ich verstehe nicht, was No results were returned by the query.
sagt. Der Datensatz wird aus der Datenbank gelöscht, aber durch diese Ausnahme wird alles in die Luft gesprengt.
Kann mir bitte jemand sagen, was ich hier falsch mache?
Ah, ich bin noch ziemlich neu bei Spring Data und JPA. Ich denke, ich sollte mehr Zeit in der Dokumentation verbringen. Ich sollte beachten, dass ich auch die "@ Transactional" Annotation hinzufügen musste, damit es funktioniert. Danke für Ihre Hilfe. – dnc253