我有两个名为父和儿童的实体,这些实体以一对多关系链接。 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));
感谢您的帮助
答案 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));