hibernate hql离线查询和子查询



hibernate离线查询和子查询,条件查询的离线查询由DetachedCriteria来代表,DetachedCriteria类使你在一个session范围之外创建一个查询,并且可以使用任意的Session来执行它。

DetachedCriteria还可代表子查询,当我们把DetachedCriteria传入Criteria中作为查询条件时,DetachedCriteria就变成了子查询。以下代码片段所示:

//定义一个离线查询

DetachedCriteria query = DetachedCriteria.forClass(Student.class)

                                        .forClass(Student.class)

                                        .setProjection(Property.forName(“name”));

//打开Session和事务(省略)


//执行离线查询

List l = query.getExecutableCriteria(session).list();

//执行子查询

List l = session.createCriteria(Student.class)

          .add(Property.forName(“name”).in(query))

          .list();

程序使用Session的getExecutableCriteria()方法来执行DetachedCriteria对象,则它被当成离线查询使用;如果程序使用Property的系列方法来操作DetachedCriteria对象,则它被当成子查询使用。