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/archive/2011/05/16/2047929.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值