Setelah mencoba semua solusi yang mungkin, saya akhirnya menemukan solusi untuk menyisipkan 100.000 baris di bawah 5 detik!
Hal yang saya coba:
1) Mengganti id AUTOINCREMENT/GENERATED hibernate/database dengan ID yang dibuat sendiri menggunakan AtomicInteger
2) Mengaktifkan batch_inserts dengan batch_size=50
3) Membersihkan cache setelah setiap jumlah 'batch_size' dari panggilan persisten()
4) multithreading (tidak mencoba yang ini)
Akhirnya yang berhasil adalah menggunakan kueri multi-insert asli dan menyisipkan 1000 baris dalam satu kueri penyisipan sql alih-alih menggunakan bertahan() pada setiap entitas. Untuk memasukkan 100.000 entitas, saya membuat kueri asli seperti ini "INSERT into MyTable VALUES (x,x,x),(x,x,x).......(x,x,x)"
[1000 sisipan baris dalam satu kueri sisipan sql]
Sekarang dibutuhkan sekitar 3 detik untuk memasukkan 100.000 catatan! Jadi hambatannya adalah orm itu sendiri! Untuk penyisipan massal, satu-satunya hal yang tampaknya berhasil adalah kueri penyisipan asli!