1+N问题
问题描述
在manyToOne的关系中,JPA默认的fetch策略是EAGER积极的,因此在查找多方的表的时候会连带查询1方的表。
本来是使用join表连接查询一句SQL语句就解决的,但是hibernate不会就行表连接查询,而是先查多方的表发一句SQL,然后根据结果中的外键,一个外键一句SQL去查询1方的表,结果就变成了1+N句SQL语句了。
解决方法:
方式一:强制改变默认的抓取策略为LAZY
方式二:在JPQL中left join fetch,它就会以join表连接查询的方式。(推荐)
缓存算法
LRU 最近很少用
LFU 命中率低
FIFO 先进先出
本文探讨了JPA在manyToOne关系中默认采用EAGER策略导致的1+N查询问题,并提供了解决方案,包括强制改为LAZY策略及推荐的JPQL中使用left join fetch进行表连接查询的方法。
171万+

被折叠的 条评论
为什么被折叠?



