我在JPA后面使用Hibernate。我正在使用EntityGraph来获取所需的数据。
我有A,B和C类
class A {
Integer attrib1;
String attrib2;
List<B> blist; // typical size: about 250 objects
List<C> clist; // typical size about 100 objects
}
类B和C有自己的子图,我将与主图一起提取。
主图表出现问题。
总共生成3个SQL查询来获取所有需要的数据。 问题出在第一个查询中。
为了减少查询的数量(这就是我的想法),在第一个查询中,Hibernate在A,B和C上进行连接。
即
一个 在A.x = B.x上左外连接B. 在A.y = C.y
上留下外连接C.这会创建高度次优的结果集,其中包含数万行,并且跨行有大量重复数据。
我可以看到,如果A和B之间的关系数量相同,则通过避免对每个集合进行单独查询,相同的查询可以变得非常有效。 A和C很小。然而,在这种情况下,由于关系的数量很大,它会失败。
如何让hibernate不这样做?
我希望Hibernate为每个Collection生成一个单独的SQL查询。这样,成本将随着收集大小而线性增加。