Открытая сессия в спящем режиме - PullRequest
1 голос
/ 23 апреля 2009

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

public class CourseDAO {

       Session session = null;
    public CourseDAO()
{

  this.session =    this.session = HibernateUtil.getSessionFactory().getCurrentSession(); 

}

    public Course findByID(int cid){


        Course crc = null;
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            Query q = session.createQuery("from Course  as course where course.cid = "+cid+" ");
            crc = (Course) q.uniqueResult();
          //note that i am not commiting my transcation here.Because If i do that i will not be able to
          //do lazy fetch


        } 
        catch (HibernateException e)
        {
            e.printStackTrace();
             tx.rollback();
            throw new DataAccessLayerException(e);
        }

        finally
        {


        }
        return crc;
}


}

и в фильтре я использую фоллинг-код

 session =  HibernateUtil.getSessionFactory().getCurrentSession();
     if(session.isOpen())
          HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().commit();

Является ли этот подход правильным ?? Может ли быть какая-то проблема

Ответы [ 2 ]

0 голосов
/ 10 ноября 2009

Когда вы создаете свой CourseDAO? Если это одноэлементный компонент или что-то еще, что живет дольше, чем просмотр страницы, ему нужно будет сохранить SessionFactory и сгенерировать новый сеанс, когда он нужен, а не сохранять сеанс.

0 голосов
/ 28 июля 2009

Не могли бы вы объяснить, зачем вам нужны ваши транзакции в ваших репозиториях? проблема в том, что они будут настолько детализированы, что вы не получите никакого преимущества от кэширования сеанса

тогда вы открываете транзакцию там, но закрываете ее в своем фильтре. что произойдет, если вы получите доступ к нескольким репозиториям в вашем сервисе? Возможно, я не понимаю, что вы имеете в виду, но я думаю, что вам нужно переосмыслить причины, которые заставляют вас управлять своими транзакциями в своих репозиториях

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