zoukankan      html  css  js  c++  java
  • 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没有被释放,而最终数据错乱,拿了缓存数据,这里要记录下

  • 相关阅读:
    解决Warning: Cannot modify header information headers already sent b...
    C#获取文件路径的几种方法
    C#反射技术之一读取和设置类的属性
    WPF中,在WebBrowser中操作源代码
    WPF 的 TabControl 绑定不同的窗口集合
    C#_在VS2010下进行单元测试
    Mvvm Light Toolkit for wpf/silverlight系列之Command和Events
    VS2005和VS2008快捷键大全(转)
    nchar,char,varchar 与nvarchar区别
    处理问题:windows server 2016由于没有远程桌面授权服务器可以提供许可证,远程会话被中断。请跟服务器管理员联系...
  • 原文地址:https://www.cnblogs.com/zf2011/p/2047929.html
Copyright © 2011-2022 走看看