Próbuję użyć Hibernate dla aplikacji wielowątkowej, w której każdy wątek pobiera obiekt i próbuje wstawić go do tabeli. Mój kod wygląda jak poniżej. Mam lokalne obiekty sesji hibernacji na wątek i w każdym InsertData robię beginTransaction i zatwierdzam.Jak korzystać z Hibernate w aplikacji wielowątkowej?
Problem jestem stoi to, że wiele razy otrzymuję „org.hibernate.TransactionException: zagnieżdżone transakcje nie są obsługiwane”
Ponieważ jestem nowy do hibernacji nie wiem, czy to co robie jest prawidłowa lub nie? Proszę dać mi znać, jaki jest właściwy sposób korzystania z hibernacji w aplikacji wielowątkowej i jak uniknąć wspomnianego wyżej wyjątku.
Dzięki
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();
}
}
Mój plik hibernacji config został c3p0.min_size=10
i c3p0.max_size=20
Czy to ma być 'b.setId()'? –
Tak, właśnie to poprawiłem. Podczas próby utworzenia minimalnego przykładu mojego rzeczywistego kodu wystąpił typo. – Rahul