Hibernate标准和行数限制

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

我如何使用Hibernate Criteria API获得至少一个具有isStudent = true Child的所有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));

谢谢你的帮助


这对我有效:

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个子女的父母。


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

crit.add(Subqueries.lt(Long.valueOf(0), countSubquery));
链接地址: http://www.djcxy.com/p/36975.html

上一篇: Hibernate Criteria and row count restriction

下一篇: Hibernate Criteria query with restricted associations