Po vyzkoušení všech možných řešení jsem nakonec našel řešení, jak vložit 100 000 řádků pod 5 sekund!
Věci, které jsem zkusil:
1) Nahrazena id hibernace/databáze AUTOINCREMENT/GENERATED ids sama vygenerovanými ID pomocí AtomicInteger
2) Povolení batch_inserts s batch_size=50
3) Vyprázdnění mezipaměti po každém počtu volání persist() 'batch_size'
4) multithreading (o tento se nepokusil)
Nakonec to, co fungovalo, bylo použití nativního dotazu s více vkládáními a vložení 1000 řádků do jednoho SQL vkládacího dotazu namísto použití persist() na každou entitu. Pro vložení 100 000 entit vytvořím nativní dotaz jako tento "INSERT into MyTable VALUES (x,x,x),(x,x,x).......(x,x,x)"
[1000 vložení řádků v jednom dotazu na vložení SQL]
Nyní trvá vložení 100 000 záznamů přibližně 3 sekundy! Takže úzkým hrdlem byl samotný orm! Zdá se, že u hromadných vkládání funguje pouze nativní dotazy na vkládání!