休眠标准和行数限制

时间:2010-06-04 09:29:57

标签: java hibernate criteria subquery

我有两个名为儿童的实体,这些实体以一对多关系链接。 Child实体具有布尔isStudent属性。

如何使用Hibernate Criteria API获得至少有一个具有isStudent = true的子项的所有Parent实体?

我试图使用Projection对象来计算至少有一个具有正确设置属性的Child的父项,然后返回行数大于零的那些,就像在下面的代码段中一样(但是不行。:

Criteria criteria = getCurrentSession().createCriteria(Parent.class);

criteria.setProjection(Projections.alias(Projections.rowCount(), "count"))
.add(Restrictions.gt("count", 0)).createCriteria("children")
.add(Restrictions.eq("isStudent", true));

感谢您的帮助

2 个答案:

答案 0 :(得分:11)

这对我有用:

DetachedCriteria crit          = DetachedCriteria.forClass( Parent.class, "theparent" );
DetachedCriteria countSubquery = DetachedCriteria.forClass( Child.class , "child"     );

countSubquery
    .add( Property.forName("theparent.id").eqProperty( "parent.id" ) )
    .setProjection(Projections.count("id"));

crit.add(Subqueries.lt(Long.valueOf(0), countSubquery));

[编辑:修正了@brabenetz指出的错误]

父母和孩子之间存在双向关系,即孩子有一个字段“父母” 它返回包含> 0个孩子的父母。

答案 1 :(得分:2)

RobAu的答案几乎就是我们所需要的。 但是它有一个小错误:而不是子查询。 gt (..)你需要子查询。 lt (...)

crit.add(Subqueries.lt(Long.valueOf(0), countSubquery));