一括操作には多くのボトルネックが考えられます。最善のアプローチは、データがどのように見えるかに大きく依存します。 Hibernateマニュアル> バッチ処理に関するセクション。
少なくとも、次のパターンを使用していることを確認してください(マニュアルからコピー):
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for ( int i=0; i<100000; i++ ) {
Customer customer = new Customer(.....);
session.save(customer);
if ( i % 20 == 0 ) { //20, same as the JDBC batch size
//flush a batch of inserts and release memory:
session.flush();
session.clear();
}
}
tx.commit();
session.close();
フラットファイルを非常に複雑なオブジェクトグラフにマッピングする場合は、よりクリエイティブにする必要がありますが、基本的な原則は、フラッシュ/コミットごとに適切なサイズのデータのチャンクをデータベースにプッシュすることと、回避することのバランスを見つける必要があることです。セッションレベルのキャッシュのサイズを拡大します。
最後に、データを正しく挿入するためにコレクションやカスケードを処理するためにHibernateが必要ない場合は、 StatelessSession 。