Сеанс Hibernate и транзакция между несколькими функциями - PullRequest
0 голосов
/ 29 января 2020

В двух словах, есть что-то не так с классом 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();
   }
}

...