ID生成戦略は、Hibernateでのバッチ挿入にとって重要です。特に、IDENTITYの生成は通常ありません 動作します(AUTOは通常IDENTITYにもマップされることに注意してください)。これは、バッチ挿入中に、Hibernateに「requiresImmediateIdAccess」と呼ばれるフラグがあり、生成されたIDがすぐに必要かどうかを示すためです。その場合、バッチ処理は無効になります。
これは、「ID挿入をすぐに実行します」と表示されている場合、DEBUGレベルのログで簡単に見つけることができます。これは、挿入直後に生成されたIDが必要であると通知されたため、バッチ処理をスキップしたことを意味します。
通常行う生成戦略 HibernateはIDを事前に生成できるため、作業はTABLEとSEQUENCEです。これにより、バッチ挿入が可能になります。
BatchingBatcherが実行中のバッチサイズを明示的に通知するため、バッチ挿入が機能するかどうかをすばやく確認する方法は、DEBUGレベルのログをアクティブ化することです(「Executingbatch size:」+ batchSize)。
さらに、バッチ挿入を実現するには、次のプロパティが重要です。私はHibernateの専門家が十分ではないので、それらが必要であるとは言いません-おそらくそれは私の特定の構成です-しかし、私の経験では、それらはそれでも必要でした:
hibernate.order_inserts = true
hibernate.order_updates = true
これらのプロパティはほとんど文書化されていませんが、SQLINSERTステートメントとUPDATEステートメントをバッチ実行用に適切にグループ化できるようにしたと思います。これはあなたが求めている複数行の挿入かもしれないと思います。私がこれについて間違っていても撃たないでください、私は記憶から思い出しています。
また、次のプロパティを設定したと仮定します。そうでない場合、これはリマインダーとして機能するはずです:
hibernate.jdbc.batch_size = xx
ここで、xxは当然のことながら希望するバッチサイズです。