我正在将旧的“经典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个,从而导致所有性能问题。
有什么方法吗?
答案 0 :(得分: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
答案 1 :(得分:0)
翻译成HQL
FROM Parent GROUP BY Parent.id, Parent.name, Parent.column1
其中Parent是先前建模的实体。 join子句在模型中定义。
至于分别为每个父项获取子项数,尝试删除子模型中的任何Lob字段,因为它们会阻碍您的应用程序速度。
希望有所帮助