Właśnie rozpoczął naukę Hibernate i używam następujący wzór (od documentation) dla każdej transakcji:Hibernate - Czy naprawdę muszę wycofać transakcję, która nie powiodła się tylko do odczytu?
private Session session;
private Transaction transaction;
protected List selectAll(Class clazz) throws HibernateException {
List objects = null;
try {
session = MyHibernateHelper.getSessionFactory().openSession();
transaction = session.beginTransaction();
// SELECT ALL
objects = session.createCriteria(clazz).list();
transaction.commit();
} catch (HibernateException exc) {
if (transaction != null) transaction.rollback();
throw exc;
} finally {
session.close();
}
return objects;
}
mogę przyjąć, że każda operacja powinna być opakowane w transakcji. Ale wydaje mi się dziwne i niepotrzebne wycofywanie select
, na wypadek niepowodzenia.
Myślę, że mogę bezpiecznie usunąć blok catch
z powyższego przykładu. I od dowolnej operacji tylko do odczytu. Czy mam rację?
zależy od sposobu wyboru. jeśli wywołałeś semantykę blokującą, cofnięcie zwolniłoby te blokady. –