考えられるすべての解決策を試した後、最終的に5秒以内に100,000行を挿入する解決策を見つけました!
私が試したこと:
1)Hibernate/データベースのAUTOINCREMENT/GENERATEDIDをAtomicIntegerを使用して自己生成されたIDに置き換えました
2)batch_size=50でbatch_insertsを有効にする
3)persist()呼び出しの「batch_size」回数ごとにキャッシュをフラッシュする
4)マルチスレッド(これは試みませんでした)
最後に機能したのは、ネイティブの複数挿入クエリを使用することでした。 persist()を使用する代わりに、1つのSQL挿入クエリに1000行を挿入します すべてのエンティティで。 100,000個のエンティティを挿入するには、次のようなネイティブクエリを作成します。"INSERT into MyTable VALUES (x,x,x),(x,x,x).......(x,x,x)"
[1つのSQL挿入クエリに1000行挿入]
今では100,000レコードを挿入するのに約3秒かかります!つまり、ボトルネックはオームそのものでした!一括挿入の場合、機能すると思われるのはネイティブ挿入クエリだけです!