Spring-data-jpa的n+1问题

当我们使用JPA提供给我们的find方法时,如果查询出来的对象关联着另外10个对象,那么JPA将会发送1+10次查询(这个对象本身要查询一次,然后每个关联对象再查询一次)

解决方案:

1.使用FetchType.EAGER+FetchMode.JOIN 的形式,使得可以自动生成一条带有LEFT OUTER JOIN 的SQL语句(前提:必须存在主外键关联,否则无效)

例如:

此时,即使设置了FetchType.EAGER+FetchMode.JOIN,同样会存在N+1的问题。

2.使用JPA2.1特性 @NamedEntityGraph注解,这是JPA推出专门优化解决JPA效率的注解。使用方式如下。

先在实体类上做声明:

然后再在Repository接口中使用@EntityGraph引用

<注>可以根据不同的问题场景,定义不同的@NamedEntityGraph,切记不要关联与业务无关的关联对象,因为会去进行JOIN表,会造成不必要的性能损耗。

关于在Spring-data-jpa框架下使用Hibernate Predicate时解决N+1问题

解决方案同Spring-data-jpa,区别是,由于在Hibernate 的Predicate中调用的是JpaSpecificationExecutor中的findAll,所以需要在Repository中覆盖对应的findAll方法,然后添加对应的EntiryGraph的注解,例如

3.使用batchSize(size=10) 进行批处理

4.使用懒加载

最新文章

  1. 关于从JSP页面插入数据到数据库中乱码问题的解决
  2. extjs combobox
  3. 关于Sublime text 的PHP编译环境配置的问题
  4. H5案例分享:html5重力感应事件
  5. 【HDU】4089 Activation
  6. slf4j,log4j,logback 初步使用
  7. iOS-Andriod百度地图仿百度外卖-饿了么-选择我的地址-POI检索/
  8. Wpf OpenFileDialog
  9. 前序 中序 后序 遍历 递归 非递归算法 java实现
  10. invalid receiver type
  11. webpack认识
  12. 还在用NuGet吗?大哥FuGet了解一下
  13. bootstraptable 分页查询
  14. 星型数据仓库olap工具kylin介绍和简单使用示例
  15. [LeetCode] 581. Shortest Unsorted Continuous Subarray_Easy tag: Sort, Stack
  16. Oracle(转换函数)
  17. STM32 printf函数
  18. redis安装命令
  19. Windows TCP/IP 临时、保留和封锁端口行为
  20. RestTemplate 发送 get 请求使用误区 多值为null

热门文章

  1. 数据加密之RSA
  2. linux下文件权限更改(转载)
  3. docker top 和 docker exec ps 命令查看的PID区别
  4. 通过实例聊聊Java中的多态
  5. LinkedList,ArrayList,Vector,HashMap,HashSet,HashTable之间的区别与联系
  6. python - lambda 函数使用
  7. sql 查询某一列最大的数据
  8. harbor设置开机自启
  9. document的属性操作
  10. mysql双主双从技术