14

各スレッドがオブジェクトを取得してテーブルに挿入しようとするマルチスレッドアプリケーションに Hibernate を使用しようとしています。私のコードは以下のようになります。スレッドごとにローカルの休止状態の Session オブジェクトがあり、各 InsertData で beginTransaction と commit を行います。

私が直面している問題は、「org.hibernate.TransactionException: ネストされたトランザクションはサポートされていません」というメッセージが何度も表示されることです。

私は冬眠するのが初めてなので、私がやっていることは正しいかどうかわかりませんか? マルチスレッドアプリで休止状態を使用する正しい方法と、上記の例外を回避する方法を教えてください。

ありがとう

public class Worker extends Thread {
private Session session = null;

Worker() {
    SessionFactory sf = HibernateUtil.getSessionFactory(); // Singleton
    session = sf.openSession();
    session.setFlushMode(FlushMode.ALWAYS);
}

public void run() {
    // Some loop which will run thousand of times 
    for (....)
    {
        InsertData(b);
    }
    session.close();
}

// BlogPost Table has (pk = id AutoGenerated), dateTime, blogdescription etc. 
private void InsertData(BlogPost b) {
    session.beginTransaction();
    Long id = (Long) session.save(b);
    b.setId(id);
    session.getTransaction().commit();
}
}

私の休止状態の設定ファイルにc3p0.min_size=10c3p0.max_size=20

4

1 に答える 1