Po kilku kolejnych godzinach znalazłem problem. Domyślny rozmiar pobierania OJDBC to 10, więc wraz ze wzrostem liczby wierszy do pobrania czas bardzo szybko rośnie.
Co dziwne:to był mój pierwszy pomysł, więc spróbowałem ustawić <property name="eclipselink.jdbc.fetch-size" value="100"/>
w persistence.xml
. Nie zadziałało, więc przeskoczyłem do innych rozwiązań. Dzisiaj ustawiłem to na pojedyncze zapytanie przez query.setHint("eclipselink.jdbc.fetch-size", 100)
i to działa.