这是我的HQL:
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(myclass.class, "b");
ProjectionList properties = Projections.projectionList();
listArr = criteria.setResultTransformer(Transformers.aliasToBean(HashMap.class)).list();
我想在执行查询后关闭会话连接。
答案 0 :(得分:2)
您正在使用sessionFactory.getCurrentSession(),因此您无需刷新和关闭会话。它在事务结束时自动刷新并关闭。
更多强>
<强>的getCurrentSession 强>
当您调用SessionFactory时。 getCurrentSession,它将为您提供在hibernate上下文中并由内部hibernate管理的会话对象。它与事务范围有关。 当你调用SessionFactory时。 getCurrentSession,如果不存在则创建一个新的Session,否则使用当前hibernate上下文中的相同会话。
<强>的openSession 强>
当您调用SessionFactory.openSession时,它总是重新创建新的Session对象并将其提供给您。您需要显式刷新和关闭这些会话对象。由于会话对象不是线程安全的,因此您需要在多线程环境中为每个请求创建一个会话对象,并在Web应用程序中为每个请求创建一个会话。
如果在单线程环境中使用hibernate,可以使用getCurrentSession