След като опитах всички възможни решения, най-накрая намерих решение за вмъкване на 100 000 реда под 5 секунди!
Неща, които опитах:
1) Заменени АВТОМАТИЧНИ/ГЕНЕРИРАНИ идентификатори на хибернация/база данни със самостоятелно генерирани идентификатори с помощта на AtomicInteger
2) Активиране на batch_inserts с batch_size=50
3) Промиване на кеша след всеки брой извиквания на persist() 'batch_size'
4) многонишковост (не опитах това)
И накрая това, което проработи, беше използването на родна заявка с множество вмъквания и вмъкване на 1000 реда в една sql заявка за вмъкване вместо да се използва persist() на всеки субект. За вмъкване на 100 000 обекта създавам собствена заявка като тази "INSERT into MyTable VALUES (x,x,x),(x,x,x).......(x,x,x)"
[1000 вмъквания на ред в една заявка за вмъкване на sql]
Сега са необходими около 3 секунди за вмъкване на 100 000 записа! Така че пречката беше самата форма! За групови вмъквания единственото нещо, което изглежда работи, са местните заявки за вмъкване!