1

私は休止状態の唯一の遅延初期化問題に次のアプローチを使用しています.それがうまくいくかどうか教えてください. いくつかの理由により、強制的に永続化レイヤーにトランザクションを実装する必要があります。

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();

このアプローチは正しいですか?? 問題が発生する可能性がありますか

4

2 に答える 2

0

リポジトリにトランザクションを保存する必要がある理由を説明していただけますか? 問題は、それらが非常にきめが細かくなるため、セッションキャッシングから何の利点も得られないことです

次に、そこでトランザクションを開きますが、フィルターで閉じます。サービスで複数のリポジトリにアクセスするとどうなりますか? 意味がよくわからないかもしれませんが、リポジトリでトランザクションを管理しなければならない理由を再考する必要があると思います

于 2009-07-28T15:32:07.503 に答える
0

CourseDAO はいつ作成しますか?シングルトン Bean など、ページ ビューよりも長く存続するものである場合は、SessionFactory を保持し、Session を保持するのではなく、必要なときに新しい Session を生成する必要があります。

于 2009-11-10T14:06:44.507 に答える