通过HQL获取孩子数量

时间:2010-01-29 11:03:20

标签: java hibernate orm hql

我在父实体和子实体之间有一对多的映射。现在我需要找到与父母列表相关的每个父母的子女数量。我试图用HQL做这个,但我不知道如何在那里得到父母的列表。另外,我不知道如何返回实体本身,而不仅仅是它的ID。我当前的HQL查询是:

select new map(parent.id as parentId, count(*) as childCount) 
from Parent parent left join parent.children children
group by parent.id

但这只返回ID,不会过滤特定的父母。

修改 根据Pascal的回答,我已将查询修改为

select new map(parent as parent, count(elements(parent.children)) as childCount) 
from Parent parent
group by parent

这确实有效,但速度极慢:在同一个数据库上30秒而不是400毫秒。

2 个答案:

答案 0 :(得分:4)

我不是100%肯定,但是这个:

select new map(parent.id, count(elements(parent.children)))
from Parent parent group by parent.id

答案 1 :(得分:0)

谢谢。我正在寻找特定父母的孩子数量,你的帖子让我朝着正确的方向前进。

如果其他人需要查找特定父母的子女数量,您可以使用以下内容:

Query query = this.sessionFactory.getCurrentSession().createQuery("select count(elements(parent.children)) from Parent parent where name = :name");
query.setString("name", parentName);
System.out.println("count = " + query.uniqueResult());