Hibernate Criteria Query API

时间:2009-04-02 14:02:42

标签: hibernate

我假设以下是不是否(?)

> 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已提交。

3 个答案:

答案 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实例