Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
try{
List<BtapplyDetail> list = this.getPrintTask(session,fileName,teller);//获取记录
boolean flag = this.updateTable(session,"BtapplyDetail", hm,condition);//更新数据
tx.commit();
}catch(Exception e){
tx.rollback();
}finally{
if(null!=session && session.isOpen()){
session.close();
}
}请问这样关闭session会出问题吗?为什么?

解决方案 »

  1.   

    按逻辑是可以的。 但是用hibernate  可以用那些通用 update(entity)进行跟新啊
      

  2.   

    这样写没有任何问题。

    }catch(Exception e){
    tx.rollback(); // 回滚语句可以不用,因为出现异常时就不会提交
    }finally{
    if(null!=session && session.isOpen()){ // null != xxx这种写法C,C++常用,Java中不是太多,楼主莫非C++高手?呵呵
    session.close();
    }
      

  3.   

    用hibernate2年了,还没这样写过,呵呵,一起学习了
    his.updateTable(session,"BtapplyDetail", hm,condition);//更新数据
      

  4.   

    我一般用HibernateSessionFactory.closeSession的那个。
      

  5.   

    既然采用spring支持的模板,为什么还要手动获取session呢?
    用spring配置事务处理就行了么
      

  6.   

    updateTagle();
    这个方法是我自己封装的一个方法。不是hibernate自带的
      

  7.   

    从代码上来看理论上是可以的,但是还是建议楼主如果要用Spring框架的模板还是让Spring自己来管理session,然后你这边也控制这个session,说不定会出些莫名其妙的问题,到时查错都不好办~~~如果你非要自己控制,那就不要用模板,自己定义个sessionFactory Bean,然后自己控制,在配置文件里定义事务声明,代码也没多少。
      

  8.   

    从代码上来看理论上是可以的,但是还是建议楼主如果要用Spring框架的模板还是让Spring自己来管理session,然后你这边也控制这个session,说不定会出些莫名其妙的问题,到时查错都不好办~~~如果你非要自己控制,那就不要用模板,自己定义个sessionFactory Bean,然后自己控制,在配置文件里定义事务声明,代码也没多少。
      

  9.   

    因为要频繁用到到了更新表的操作,所以自己写了个updateTable方法。事务的管理是由项目架构定的规责,就是配置文件也不能随便添加提交的。而且用spring框架管理事务固然简单易操作,但个人觉的业务上就不那么灵活,会以一定的性能做代价。这只是个人观点,希望大家多讨论,把自己的观点分享一下。也希望高手们多多指点。
      

  10.   

    最好这样写
    this.getHibernateTemplate().getSessionFactory().closeSession();