проблема в спящем режиме DAO (сессия уже закрыта !!) - PullRequest
0 голосов
/ 09 июля 2011

Я реализовал DAO следующим образом:

// pseudoCode

public MyDAO{

  private Session session;
  MYDAO{
  this.setSession(HibernateUtil.getSessionFactory().getCurrentSession());
  }

  public void save(MyObj obj){
   //save obj in db
  }
}

Теперь я использовал дао для сохранения одного объекта, он работает нормально. Теперь, если сохранить два объекта внутри отдельноtranscation я получаю сообщение об ошибке "сеанс уже закрыт"

EG

Feature feature = new Feature();
feature.setFeatureName("testf333");

FeatureDAO featureDAO = new FeatureDAO();
Transaction tx = featureDAO.getSession().beginTransaction();
featureDAO.makePersistent(feature);
tx.commit();
System.out.println("successfully save in db " + feature.getId());


tx = featureDAO.getSession().beginTransaction();  //getting error here
Feature feature4 = new Feature();
feature4.setFeatureName("4444");
featureDAO.makePersistent(feature4);

tx.commit();
System.out.println("successfully save in db " + feature.getId());

Я думаю, что эту проблему можно решить, проверив, закрыт ли сеанс. Но где я могу установить новый сеанспотому что я использую сеанс из DAO, чтобы начать транскрипцию

1 Ответ

2 голосов
/ 09 июля 2011

Вместо того, чтобы пытаться удерживать Session в вашем MyDAO, вам, вероятно, лучше всего удерживать только SessionFactory, и, когда необходимо, получить сессию, определив свой метод getSession вMyDAO как

public Session getSession() {
   return sessionFactory.getCurrentSession();
}

или просто вообще не сохранять ничего, связанного с обработкой сеанса, в MyDao и использовать

public Session getSession() {
   return HibernateUtil.getSessionFactory().getCurrentSession();
}

Сеанс гибернации связан с конкретным потоком и закрытcommit, но метод фабрики сеансов getCurrentSession() получает новый сеанс по мере необходимости, так что вам не нужно об этом беспокоиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...