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

 

 

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM