0

バッチ処理に関する 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();

コードの冒頭では、を使用しますopenSession()。しかし、コードを書くときは、を使用しますgetCurreentSession()org.hibernate.TransactionException: nested transactions not supportedエラーが発生するようです。

なぜこれが起こるのか誰か説明できますか?

4

1 に答える 1

0

SessionFactory.openSession() は、操作が完了したら閉じる必要がある新しいセッションを常に開きます。SessionFactory.getCurrentSession() は、コンテキストにバインドされたセッションを返します。これを閉じる必要はありません。

于 2013-10-10T16:39:49.367 に答える