• 执行session.createSQLQuery(querySql).list()多次后,再次执行没有动静


    问题:

    我的程序是这样的

    String querySql="select A.name,B.name " +
                      " from A inner join B on A.id=B.id " +
                      " where A.s='q' ";
            Session session = this.getSession();
            List<Object>  objList = (List<Object> )session.createSQLQuery(querySql).list();前20次执行都成功了,再次执行时,执行到 session.createSQLQuery(querySql).list()  就没有动静了。

    看了别人的取的session也出现了这样的问题,

    别人的代码是这样的 Session session = this.getHibernateTemplate().getSessionFactory().getCurrentSession();

            session.createSQLQuery(querySql).list();

      出错的原因是能查询的某个对象处于持久化状态或流离状态,需要清空下session缓存(flush()或者clear())。

    所有我一开始执行了this.getSession().flush(),但是没有效果,后来发现我用的session 是 org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(), 本来想将它改为this.getHibernateTemplate().getSessionFactory().getCurrentSession(),执行getHibernateTemplate().flush()清缓存,但是发现this.getHibernateTemplate().getSessionFactory()不为null,但是this.getHibernateTemplate().getSessionFactory().getCurrentSession()就是一个获取不到的变量 ,所以这种办法也不行。

    根本原因:

    配置文件里设置了最大的连接数据库的次数。所以,每次到达最大连接次数时,就无法连接和操作数据库了。

    解决:

    一:

    修改这个最大连接数。最好每次使用完数据库时,断开和数据库的连接。

    二:

    其实一开始用的Hql,但是因为关联查询另一个表,我用join方式查询不了,所以改为sql,但是HQL支持where语句里写连接条件的表关联查询,所以最后代码改成 HQL方式查询了。

      List<Object> objList=null;
      String hql="select A.name,B.name " +
                      " from A, B " +
                      " where A.id=B.id and A.s='q' ";
            try {
                objList=(List<Object>)this.getHibernateTemplate().find(hql);
            } catch (RuntimeException e) {
                // TODO: handle exception
               throw e;
            }


     

  • 相关阅读:
    Linux_DNS服务器
    Linux_DNS服务器
    Linux_FTP服务器
    Linux_FTP服务器
    Linux_DHCP&DHCP Relay
    分布式内存存储式元数据服务的构建
    如何提高分布式系统的可观察性:Insight Tool的引入
    论分布式系统中Metric框架的设计
    分布式存储系统关于GDPR条例中的数据清除原则
    Pipeline并行处理模型
  • 原文地址:https://www.cnblogs.com/lan-writenbook/p/5363746.html
Copyright © 2020-2023  润新知