効率的なバッチ挿入のために、次のプロパティを有効にしてください。
<property name="hibernate.order_updates" value="true"/>
<property name="hibernate.order_inserts" value="true"/>
<property name="hibernate.jdbc.batch_versioned_data" value="true"/>
<property name="hibernate.jdbc.batch_size" value="50"/>
また、エンティティ @Id column に IDENTITY を使用しないようにしてください。IDENTITY ジェネレーターがバッチ処理を無効にしました。
シーケンスをサポートする DB (Oracle、PostgreSQL、SQL Server 2008) を使用する場合は、強化されたジェネレーター、特にpooled-lo オプティマイザーを試すことをお勧めします。
Hibernate からストアド プロシージャを呼び出すこともできますが、バッチ挿入よりもデータの選択に便利です。
提案された Hibernate バッチ サポートが十分でない場合は、おそらくネイティブ ストアド プロシージャを試す必要があります。
どの方法を選択しても、実行時間の長いトランザクションに注意する必要があります。実行時間の長いトランザクションはロックを保持し、元に戻す/やり直しデータベースのログが大きくなり、トランザクションがさらに遅くなる可能性があります。