Nadat ik alle mogelijke oplossingen had geprobeerd, vond ik eindelijk een oplossing om 100.000 rijen in te voegen binnen 5 seconden!
Dingen die ik heb geprobeerd:
1) Hibernate/database's AUTOINCREMENT/GENERATED id's vervangen door zelf gegenereerde ID's met behulp van AtomicInteger
2) Batch_inserts inschakelen met batch_size=50
3) Cache leegmaken na elk 'batch_size' aantal persist() calls
4) multithreading (heb deze niet geprobeerd)
Wat uiteindelijk werkte, was het gebruik van een native multi-insert query en 1000 rijen invoegen in één sql-invoegquery in plaats van persist() . te gebruiken op elke entiteit. Voor het invoegen van 100.000 entiteiten maak ik een native query zoals deze "INSERT into MyTable VALUES (x,x,x),(x,x,x).......(x,x,x)"
[1000 rij-inserts in één sql insert-query]
Nu duurt het ongeveer 3 seconden om 100.000 records in te voegen! De bottleneck was dus de orm zelf! Voor bulk-inserts is het enige dat lijkt te werken native insert-query's!