Z jakiegoś powodu pomyślałem, że niejawna transakcja, do której przyłącza się podmiot entityManager, jest nową transakcją. Ale Zahibernuj dokumenty state:"Kiedy tworzysz menedżera encji w ramach transakcji, menedżer encji automatycznie dołącza do bieżącej transakcji."
Najwyraźniej jest już uruchomiona inna transakcja (nie jest to zaskakujące), a moje wyniki pobierania zmieniają się w zależności od tego, co już przeczytała (ponieważ baza danych działa w trybie REPEATABLE-READ).
W krótkim okresie przeszukam mój kod, aby jawnie rozpocząć () transakcje wszędzie tam, gdzie tego brakuje. Na dłuższą metę przyjrzę się Spring Transactions, aby zobaczyć, jak zarządzać transakcjami w bardziej niezawodny sposób (jak sugerowano w komentarzach).