我使用hibernate来管理我的数据库/ 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)
像这样关闭会话。 SessionFactory.openSession()始终打开一个新会话。你必须像这样关闭它。
。session.close();
SessionFactoryUtil.getSessionFactory()的getCurrentSession()关闭();只有在你设置了属性hibernate.current_session_context_class = thread时才会起作用。更多细节 - Hibernate openSession() vs getCurrentSession()