簡體   English   中英

在視圖中休眠Open Session

[英]hibernate Open Session in View

我正在使用以下方法來解決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();

這種方法正確嗎? 可以有什么問題嗎

您能解釋一下為什么您需要在您的存儲庫中進行交易嗎? 問題在於它們的粒度是如此之細,因此您不會從會話緩存中獲得任何好處

那么您要在那里打開交易,但要在過濾器中關閉交易。 如果您訪問服務中的多個存儲庫,會發生什么? 也許我不明白您的意思,但我認為您需要重新考慮迫使您在存儲庫中管理交易的原因

何時創建CourseDAO? 如果它是單例bean或比頁面視圖更長壽的其他東西,則需要保留SessionFactory並在需要時生成一個新Session,而不是保留Session。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM