Wie überschreibt man eine Löschmethode für ein Spring Data CrudRepository?

8

Ich habe einige Objekte, die ich nicht löschen kann, und muss stattdessen ein allgemeines Feld namens "gelöscht" aktualisieren. Ich lese dort , dass ich kann schreibe generische Querys mit #{#entityName} . Aus diesem Grund habe ich versucht, CrudRepository#delete(…) methode wie folgt zu überschreiben:

%Vor%

Aber ich habe einen Komponententest, der mich falsch zeigt!

%Vor%

Ist es nicht möglich, CrudRepository Methoden wie diese zu überschreiben?

    
Rafael T 19.04.2014, 17:36
quelle

1 Antwort

5

Zum Ändern von Abfragen müssen Sie der Methode ein @Modifying hinzufügen.

Achten Sie darauf, dass Sie die Nebenwirkungen der von Ihnen gewählten Methode kennen:

  • Das Ausführen einer Manipulationsabfrage umgeht alle EntityManager -Caches. Ein nachfolgendes findOne(…) kann / wird also immer noch die alte Instanz des Objekts, das Sie löschen wollten, zurückgeben, falls EntityManager es bereits geladen hat. Um dies zu verhindern, setzen Sie das Flag clearAutomatically in @Modifying auf true , aber beachten Sie, dass dadurch alle ausstehenden Änderungen gelöscht werden.
  • Für abfragebasierte Datenmanipulation werden no Lifecycle-Callbacks ausgelöst und no -Kaskaden werden auf der Ebene des Persistenzkontexts ausgelöst. Das bedeutet, dass Entity-Listener, die auf ein @PreUpdate -Ereignis warten, nicht benachrichtigt werden. Auch irgendwelche Kaskadenoperationen
Oliver Gierke 20.04.2014, 07:20
quelle

Tags und Links