我假设以下是不是否(?)
> public Criteria createCritera(Class<?> persistentClass) {
> ...//creation of session object etc.
> session.beginTransaction();
> Criteria crit = session.createCriteria(persistentClass);
> session.getTransaction().commit();
> session.close();
>
> return crit;
}
OR是否可以使用和操作Critera对象,即使用于创建Critera的Session对象已关闭且当前的Transaction已提交。
答案 0 :(得分:3)
这确实不是一个好主意......
我不确定你要完成什么,但我认为你应该看一下DetachedCriteria
课程。
这允许您创建未链接/连接到会话的Criteria查询。当你想要执行DetachedCriteria时,你必须将它附加到一个会话,你就可以了。
答案 1 :(得分:3)
如果您没有有效的Session
,请使用DetachedCriteria。稍后(例如,在DAO中,您有一个用于执行查询的活动会话),您可以使用DetachedCriteria#getExecutableCriteria来获取可执行文件Criteria
。
答案 2 :(得分:0)
如果你试图在创建Query / Critera的会话之后操作Query / Critera,你将会得到一个HibernateException。例外情况会说:“会话已关闭”。
因此,如果Detached技术不适用,我建议(我自己)总是返回结果,例如。
crit.list();
query.list();
而不是撤回Critera / Query实例