Ich habe zwei Entitäten, Transaktion und Eintrag. Die Transaktion hat einige eigene Daten und eine Liste von einem oder mehreren Einträgen, die aus einem Soll- und einem Habenbetrag besteht. In einem Teil der Anwendung muss ich fast alle entfernen und festgestellt, dass JPQL in diesem Fall am einfachsten und schnellsten ist.JPA auf Datenbankänderungen aufmerksam machen
ich diesen Code ausführen:
entityManager.createQuery(
"DELETE FROM Entry e WHERE e IN (:entries)").
setParameter("entries", new ArrayList<Entry>(
entriesToRemove)).executeUpdate();
entityManager.createQuery(
"DELETE FROM Transaction e WHERE e IN (:transactions)").
setParameter("transactions", new ArrayList<Transaction>(
transactions)).executeUpdate();
Das Problem später im Code ist, noch in derselben Transaktion (Ausführungsgeschäft dieses Mal) ich alle Einträge zu durchqueren müssen, die auf einigen Transaktionen vorhanden ist, die EntityManager gibt mir noch die Transaktionen, die ich gerade erst entfernt habe.
Ich vermute, dass es eine Möglichkeit geben sollte, dieses Ereignis zu behandeln, in meinem Beispiel führe ich einfach zwei JPQLs löschen aus, aber ich hätte auch einen externen Dienst oder etwas anderes außerhalb der Datenbank aufrufen können. In jedem Fall muss ich sicherstellen, dass der Cache des EntityManagers immer noch gültig ist, da er jetzt immer noch die gelöschten Objekte enthält.
Ich habe versucht mit entityManager.flush(); nach diesen löscht es zu keinem Erfolg. Da verwende ich executeUpdate(); Die Löschungen werden sofort in die darunterliegende Datenbank geleert, so dass ich nicht wirklich erwartet habe, dass sie hilft.
Schätzen Sie alle Zeiger, Hinweise und Antworten.