Java 用于大小检索的JPA Hibernate获取集合

Java 用于大小检索的JPA Hibernate获取集合,java,performance,hibernate,jpa,Java,Performance,Hibernate,Jpa,是否有可能仅仅为了检索实体的大小而获取实体的集合 比如: FROM Cat c JOIN SIZE c.kittens 因此,我可以使用如下查询结果: int sum = 0; for(Cat c : em.createQuery("..", Cat.class).getResultList()) sum += c.getKittens().size(); 是否有任何关键字或其他可能只获取尺寸 为此,获取整个集合并不是什么大问题,但我只是在考虑性能改进,并问自己如何做到这一点?您可以在

是否有可能仅仅为了检索实体的大小而获取实体的集合

比如:

FROM Cat c JOIN SIZE c.kittens
因此,我可以使用如下查询结果:

int sum = 0;

for(Cat c : em.createQuery("..", Cat.class).getResultList())
  sum += c.getKittens().size();
是否有任何关键字或其他可能只获取尺寸


为此,获取整个集合并不是什么大问题,但我只是在考虑性能改进,并问自己如何做到这一点?

您可以在JPQL中使用SQL聚合函数 单只猫

select count(*) from Kittens k where k.cat = :cat
一次为每只猫(小猫表中的所有行)

并将其检索为

Long size = (Long) query.getSingleResult();

COUNT
只给出金额而不是总和,使用
sum
无循环地给出所需的结果。@DRCOLOSOS-OP查找的是计数,而不是总和。我认为
sum
用于算术加法(3+8),就像在account表中获取总金额一样。而
COUNT
是表中的行数。@viktor hmmm,他得到了小猫的大小,并将其添加到总数中(
sum+=
)。但是不太确定。
getKittens()
应该返回一些
Collection
因此
size()
返回小猫的数量(行)。若你们计算猫表中的行数,你们就得到了所有猫中所有猫的总和——假设只有猫可以有小猫;-)
Long size = (Long) query.getSingleResult();