一尘不染

休眠获取策略-何时使用“ join”和何时使用“ select”?

hibernate

大多数Hibernate关联都支持“提取”参数:

fetch="join|select"

默认值为“选择”。

如何决定将哪个用于哪个关联?

我尝试将应用程序范围从“选择”全部更改为“连接”-生成的查询数量可能减少了10倍,但性能却保持不变(甚至变得稍差一点)。

谢谢。


阅读 223

收藏
2020-06-20

共1个答案

一尘不染

Join应该可以解决n +
1问题。如果您有10个父母,每个父母有10个孩子,则join将需要一个查询,而select则需要11个查询(一个对于父母,每个父母的孩子)。如果数据库与应用程序位于同一服务器上,或者网络速度非常快,那么这可能没什么大不了的,但是如果每个数据库调用中都存在延迟,则可以累加。对于初始查询,join方法的效率稍差一些,因为您要复制每一行中的父列,但是您只能往返数据库一次。

通常,如果我知道我需要所有父母的孩子,我会加入。如果我只需要几个父母的孩子,则可以使用select。

2020-06-20