2016-06-27 20 views
0

我用冬眠來管理我的數據庫/ javaWebApplication互動,與新的要求我必須有滾動的結果,並繪製自己的查詢結果,我在Java使這個泛型類返回的ScrollableResults通用休眠滾動的結果方法

public ScrollableResults executeCursorQuery(final String 
    queryString, final Object... params) throws PersistenceException 
    { 

    Session session = SessionFactoryUtil.getSessionFactory().openSession(); 

    SQLQuery sqlQuery = session.createSQLQuery(queryString); 

    int position = 0; 
    for (Object param: params) { 
     sqlQuery.setParameter(position, param); 
     position++; 
    } 
    ScrollableResults results = sqlQuery.scroll(); 

    return results; 
} 

我遍歷結果,並準確地映射我的信息,我做了後,我做

SessionFactoryUtil.getSessionFactory().getCurrentSession().close(); 

它的工作原理相當不錯,但之後這種方法它崩潰的應用程序打了幾個電話,我想這是因爲這些會議每次都是開放的,因爲我也使用c3p0來處理連接池。 我真的不知道我在這裏的循環,如果任何人發現錯誤或知道我做錯了什麼,可以指向我在正確的方向,將不勝感激。

+0

哪個數據庫正在使用? –

+0

請注意,getSession()和openSession()方法之間存在細微差別。如果使用openSession(),則通過調用session.close()關閉sesssion對象。 http://stackoverflow.com/questions/8046662/hibernate-opensession-vs-getcurrentsession –

+0

是的,但我需要會議打開,以便能夠迭代查詢的結果,我完成後關閉它,但它doesn' t似乎工作我發佈了我用來關閉它的代碼行,它應該工作,但不。 – fr3d0

回答

0

這樣關閉會話。 SessionFactory.openSession()總是打開一個新的會話。你必須像這樣關閉它。

session.close();

SessionFactoryUtil.getSessionFactory()。getCurrentSession()。close();只有當你設置了屬性hibernate.current_session_context_class = thread時才能工作。更多細節在這裏 - Hibernate openSession() vs getCurrentSession()