В двух словах, есть что-то не так с классом Manager, который выполняет все взаимодействия с моей базой данных, и классом контроллера, который использует этот класс manager. Но я хочу, чтобы контроллер мог вызывать несколько функций в диспетчере, все в пределах одного сеанса, поэтому, если какой-либо из вызовов не будет выполнен, все вызовы будут откатываться. Как то так ...
import org.hibernate.Session;
import org.hibernate.Transaction;
public class Manager
{
private Session session = null;
private Transaction transaction = null;
public void startSession()
{
session = sessionFactory.openSession();
transaction = session.beginTransaction();
}
public void completeTransactions()
{
try()
{
transaction.commit();
session.close();
}
catch(Exception e)
{
// log error
rollback();
}
}
public void rollback()
{
transaction.rollback();
session.close();
}
public void placeOrder() throws Exception
{
// some work that includes database transactions
session.saveOrUpdate(someHibernateObject);
}
public void updateOrder() throws Exception
{
// some work updating order that includes database transactions
session.saveOrUpdate(someHibernateObject);
}
}
public class Controller
{
Manager manager = new Manager();
try()
{
manager.startSession();
manager.placeOrder();
manager.updateOrder();
manager.completeTransactions();
}
catch(Exception e)
{
// log error
manager.rollback();
}
}