Nie wiem, jak odbywa się „zagnieżdżanie” transakcji w Hibernate (ponieważ nie wierzę, że MySQL może faktycznie zagnieżdżać transakcje).
Założyłbym więc, że druga (zagnieżdżona) transakcja musi (?) być nowym połączeniem z bazą danych - w przeciwnym razie nie byłoby możliwe wycofanie „zagnieżdżonej” transakcji bez wpływu na „zewnętrzną” transakcję.
Jeśli rzeczywiście tak jest, prawdopodobnie trafiłeś na domyślny poziom izolacji MySQL, którym jest REPEATABLE READ
co nie pozwoli zewnętrznej transakcji zobaczyć żadnych danych, które zostały zatwierdzone po ta transakcja się rozpoczęła.
Aby przetestować tę teorię, spróbuj zmienić poziom izolacji (zewnętrznej transakcji) na READ COMMITTED
i zobacz, czy to rozwiąże problem.