Я пытаюсь использовать Hibernate для многопоточного приложения, в котором каждый поток извлекает объект и пытается вставить его в таблицу. Мой код выглядит ниже. У меня есть локальные спящие объекты сеанса на поток, и в каждой InsertData я начинаю транзакцию и фиксирую.
Проблема, с которой я сталкиваюсь, заключается в том, что много раз я получаю "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();
}
}
Мой конфигурационный файл hibernate имеет c3p0.min_size=10
и c3p0.max_size=20