Aus irgendeinem Grund dachte ich, die implizite Transaktion, die der EntityManager verbindet, sei eine neue Transaktion. Aber Dokumente überwintern state:"Wenn Sie einen Entitätsmanager innerhalb einer Transaktion erstellen, tritt der Entitätsmanager automatisch der aktuellen Transaktion bei."
Anscheinend läuft also bereits eine andere Transaktion (nicht überraschend) und meine Abrufergebnisse ändern sich je nachdem, was sie bereits gelesen hat (weil die Datenbank im REPEATABLE-READ-Modus läuft.)
Kurzfristig werde ich meinen Code durchsuchen, um Transaktionen explizit zu beginnen (), wo immer das fehlt. Längerfristig werde ich mich mit Spring Transactions befassen, um zu sehen, wie Transaktionen narrensicherer verwaltet werden (wie in den Kommentaren vorgeschlagen).