Sto tentando di utilizzare Hibernate per un'applicazione multi thread in cui ogni thread recupera un oggetto e tenta di inserirlo in una tabella. Il mio codice appare come di seguito. Sono presenti oggetti Session di sospensione locali per thread e in ogni InsertData faccio startTransaction e commit.Come usare Hibernate in un'applicazione multi-thread?
Il problema che sto affrontando è che molte volte ottengo "org.hibernate.TransactionException: nidificato operazioni non supportate"
Dato che io sono nuovo di ibernazione non so se quello che sto facendo è corretto o non? Per favore fatemi sapere qual è il modo corretto di utilizzare la sospensione in un'app multi-thread e come evitare l'eccezione sopra menzionata.
Grazie
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();
}
}
mio file di sospensione di configurazione è c3p0.min_size=10
e c3p0.max_size=20
Si suppone che sia 'b.setId()'? –
Sì, l'ho appena corretto. Si è verificato un errore durante il tentativo di creare un esempio minimo del mio codice effettivo. – Rahul