各スレッドがオブジェクトを取得してテーブルに挿入しようとするマルチスレッドアプリケーションに 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=10
はc3p0.max_size=20