我在想,如果spring向业务层注入DAO Bean时每次都是新new一个,那在DAO类中使用hibernate session时是不是就不用考虑并发的问题了?一律sessionFactory.openSession()就行了吧?实际工作中都是怎么处理的呢??spring有个声明式的事务管理功能,这个功能是不是就是为了解决我考虑的这个问题的?何时会用到这个功能呢?难道在DAO Bean是单例模式的情况下用??。。纠结好久了,求大牛们帮助~

解决方案 »

  1.   

    一般如果用 spring 托管hibernate 的话dao类都是继承 hibernateDaosupport类....基本都不用考虑打不打开session啊.....
      

  2.   

    不需考虑,每次open都是新连接,注意关闭即可。声明事务主要用于复杂的多表更新操作,常归都不需要。
      

  3.   

    sessionFactory本身就是利用单例模式吧,hibernate映射数据的时候CRUD都是封装好的。
      

  4.   


    恩 但是我这项目有这样的一个情况:DAO中的方法有互相调用的情况,而且还是一个事务,这样的话貌似必须使用同一个session,如果每个DAO方法都新开session的话就没办法工作了。。
      

  5.   

    你说的这种情况,两个手段来解决:
    1、依赖于Sping提供的事务管理(基于拦截),这个可以Google下,挺方便的;可以在一个Service类中操作多个DAO,使用同一个上下文;
    2、自己管理Session。如果关联关系不是复杂到吐血的话,推荐尽量用前者。
      

  6.   


    话说,大侠,如果使用spring的事务管理的话,我的DAO类是不是都要继承spring提供那个HibernateDAOSupport?
    不然我想不出spring是怎么实现事务的
      

  7.   

    我得去看看HibernateDAOSupport。。貌似是模板方法这个设计模式
      

  8.   

    以目的为导向而已。
    你的原始目标并不是必须以“XXOO”来实现的话要怎么样?
    而是如果我用“XXOO”来实现是不是很好?