大多数Hibernate关联都支持“提取”参数:
fetch="join|select"
默认值为“选择”。
如何决定将哪个用于哪个关联?
我尝试将应用程序范围从“选择”全部更改为“连接”-生成的查询数量可能减少了10倍,但性能却保持不变(甚至变得稍差一点)。
谢谢。
Join应该可以解决n + 1问题。如果您有10个父母,每个父母有10个孩子,则join将需要一个查询,而select则需要11个查询(一个对于父母,每个父母的孩子)。如果数据库与应用程序位于同一服务器上,或者网络速度非常快,那么这可能没什么大不了的,但是如果每个数据库调用中都存在延迟,则可以累加。对于初始查询,join方法的效率稍差一些,因为您要复制每一行中的父列,但是您只能往返数据库一次。
通常,如果我知道我需要所有父母的孩子,我会加入。如果我只需要几个父母的孩子,则可以使用select。