Tutto quello che ho letto su Hibernate afferma che è necessario eseguire il rollback di una transazione e chiudere la sessione quando si verifica un errore, e non c'è di solito qualche variazione del codice seguente (tratto da documenti di Hibernate) dato a titolo di esempio:Cosa succede se non si ripristina una transazione in Hibernate?
Session sess = factory.openSession();
Transaction tx = null;
try {
tx = sess.beginTransaction();
// do some work
...
tx.commit();
} catch (RuntimeException e) {
if (tx != null) tx.rollback();
throw e; // or display error message
} finally {
sess.close();
}
Questo schema mi sembra strano per un paio di motivi. In primo luogo, sembra irragionevolmente complicato per un quadro che è generalmente orientato a rendere le cose semplici. Ancora più importante, cosa succede se il codice nel blocco try
genera qualcosa di diverso da un RuntimeException
? Sembra che Hibernate debba essere in grado di chiudere con garbo la sessione con una transazione aperta in quel caso, presumibilmente spostandolo indietro, ma se è vero, perché preoccuparsi di chiamare rollback
?
Chi ti ha detto che Hibernate rende le cose semplici? :) – skaffman