我在父实体和子实体之间有一对多的映射。现在我需要找到与父母列表相关的每个父母的子女数量。我试图用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毫秒。
答案 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());