1

我正在将旧的“经典 ASP”应用程序迁移到 J2EE/Hibernate。我对以下类型的 SQL 语句有疑问:

SELECT parent.id, parent.name, parent.column1, count(child.id) AS no_of_children
FROM parent
INNER JOIN child ON child.parent_id = parent.id
GROUP BY parent.id, parent.name, parent.column1

如何在 HQL 中表达这样的内容?我试图将孩子映射为一个集合(通过使用多对一)并从集合大小中获取孩子的数量,但是 Hibernate 必须分别为每个父母加载所有“孩子”实体。

这导致执行大约 1000 个 DB 查询而不是 1 个,从而导致性能问题。

有没有办法解决?

4

2 回答 2

1

我会尝试以下方法:

select parent.id, parent.name, parent.column1, count(child) 
from Parent parent 
join parent.Children as child 
group by parent.id, parent.name, parent.column1
于 2009-03-24T22:34:47.440 回答
0

翻译成 HQL

FROM Parent GROUP BY Parent.id, Parent.name, Parent.column1

其中 Parent 是先前建模的实体。连接子句在模型中定义。

至于获取子节点的数量,对于每个父节点,请尝试删除子模型中的任何 Lob 字段,因为它们会限制您的应用程序速度。

希望有所帮助

于 2009-03-24T22:22:23.540 回答