Hibernate的session问题

我们的Dao都是继承自自己写的一个Dao基类,基类文件是这样写的:


public class HibernateDao {

  protected static InitHibernate hb ;

  protected Session sess = null;

  protected Transaction transaction = null;

  public HibernateDao() {

    this.openSession();

  }

  public HibernateDao(Session session) {

    sess = session;

  }

  public void openSession(){

    try{

      hb = InitHibernate.instance();

      sess = hb.getSession();

    }catch (Exception e){

      e.printStackTrace();

    }

  }

  public void closeSession(){

    if (sess != null) {

      try {

        sess.close();

      } catch (Exception ex) {

         ex.printStackTrace();

      }

    }

  }

  public void beginTransaction(){

    if(null==sess){

      openSession();

    }

    try {

      transaction = sess.beginTransaction();

    } catch (Exception ex) {

      ex.printStackTrace();

    }

  }

  public void endTransaction(){

    if(!commit()){

      rollback();

    }

  }

  /**

  * 确定是否对数据进行了提交.

  * @return true 已提交,false 未提交.

  */

  public boolean commit(){

    if (null!=transaction) {

      try {

        transaction.commit();

        return true;

      } catch (Exception ex) {

        ex.printStackTrace();

      }

    }

    return false;

  }

  public void rollback(){

    if (null != transaction) {

      try {

        transaction.rollback();

      } catch (HibernateException ex) {

        ex.printStackTrace();

      }

    }

  }

  public void delete(Object object) {

    try {

      sess.delete(object);

      sess.flush();

    } catch (Exception ex) {

      ex.printStackTrace();

    }

  }

  //save和update同delete方法,再此省略

}


问题:更新记录页面,有一个返回按钮,是返回到上一层页面,上层页面就是显示所有数据的页面,如果进入更新记录页面之后,没更新,点击返回按钮,会发现数据有窜了的现象,String的一个字段的值有的时候是没有,有的时候是错误数据,我就想问题出现的可能,猜想是在查询的时候没有关闭session,于是就返回找到所有相关的地方,关闭session,例如:

DemoDao demoDao = new DemoDao();

demoDao.save(demo);

demoDao.closeSession();//更新、添加和删除都有关闭的语句


DemoDao demoDao = new DemoDao();

demoDao.load(id);

demoDao.closeSession();//这里就没写,本以为查询语句不需要关闭session,实际上,如果不关闭session,就会导致session没有被释放,而最终数据错乱,拿了缓存数据,这里要记录下

原文地址:https://www.cnblogs.com/zf2011/p/2047929.html