在网上有很多人谈到hibernate关闭session情况。在HibernateSessionFactory使用了ThreadLocal。有些网友说在DAO中无需关闭session,如下:public boolean save(Printers transientInstance) {
     log.debug("saving Printers instance");
     try {
          // 开始事务
Transaction tran = getSession().beginTransaction() ;
 // 执行语句
getSession().save(transientInstance);
// 提交事务
tran.commit();
log.debug("save successful");
return true;

         catch (RuntimeException re) {
log.error("save failed", re);
System.out.println("Error: "+re.getMessage());
return false;
}
}但有些文章说如果不关闭session会造成不好影响,应该打开Session,但操作执行完毕后要关闭Session,如下:
public boolean save(Printers transientInstance) {
log.debug("saving Printers instance");

Transaction tran=null;
try {
            // 开始事务
 tran = getSession().beginTransaction() ;
// 执行语句
getSession().save(transientInstance);
// 提交事务
tran.commit();

log.debug("save successful");
return true;
} catch (RuntimeException re) {
log.error("save failed", re);
//设置回滚
if(tran!=null)
tran.rollback();
System.out.println("Error: "+re.getMessage());
return false;
}
finally{
closeSession();
}
}请问哪种合理?在使用ThreadLocal后是不是可以不关闭Session?