我有一个实体,我希望它具有孩子数量的属性。假设我有这两个表:
create table father
(
id int,
name
);
create table child
(
id int,
father_id int
);
我希望 Hibernate 中的父实体具有这样的属性:
private int countChildren;
从 SQL 的角度来看,这很容易:
SELECT f.id, f.name, count(father_id) as count_children
FROM father f JOIN child c ON f.id = c.father_id
GROUP BY f.id, f.name;
简单高效。但是,由于我想将它作为实体的 Hibernate 属性,所以我找到的最接近的是:
@Formula("(select count(*) from child c where c.father_id = id)")
private int countChildren;
然而,在幕后它是作为一个标量子查询执行的,其中对子表的访问是每个父记录的 - 效率非常低(像 Oracle 这样的一些数据库对这些类型的查询进行了一些优化,但我不想依赖于此,与带有 GROUP BY 的 SQL 版本相比,它仍然不是最优的)。
有没有一种休眠方式来解决这个问题?幕后执行的方式与上述 GROUP BY 示例类似?