执行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;
        }

 

 

 


 

转载于:https://www.cnblogs.com/lan-writenbook/p/5363746.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值