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 先进先出