Po wypróbowaniu wszystkich możliwych rozwiązań w końcu znalazłem rozwiązanie umożliwiające wstawienie 100 000 wierszy w ciągu 5 sekund!
Rzeczy, których próbowałem:
1) Zastąpiono identyfikatory AUTOINCREMENT/GENERATED hibernacji/bazy danych przez samodzielnie wygenerowane identyfikatory przy użyciu AtomicInteger
2) Włączenie insert_inserts z batch_size=50
3) Opróżnianie pamięci podręcznej po każdej liczbie wywołań „batch_size” persist()
4) wielowątkowość (nie próbowałem tego)
Wreszcie zadziałało natywne zapytanie z wieloma wstawkami i wstawianie 1000 wierszy w jednym zapytaniu sql insert zamiast używania persist() na każdym podmiocie. Aby wstawić 100 000 jednostek, tworzę natywne zapytanie, takie jak to "INSERT into MyTable VALUES (x,x,x),(x,x,x).......(x,x,x)"
[1000 wierszy wstawianych w jednym zapytaniu sql]
Teraz wstawienie 100 000 rekordów zajmuje około 3 sekund! Więc wąskim gardłem był sam orm! W przypadku wstawiania zbiorczego jedyne, co wydaje się działać, to natywne zapytania wstawiania!