jpa Specification fetch查询报错,query specified join fetching, but the owner of the fetched association was not present in the select

  • jpa Specification fetch查询报错,query specified join fetching, but the owner of the fetched association was not present in the select
  • 使用fetch的原因

jpa Specification fetch查询报错,query specified join fetching, but the owner of the fetched association was not present in the select

使用jpa Specification 使用fetch查询时报错query specified join fetching, but the owner of the fetched association was not present in the select。

  root.fetch("xxxxxxxx", JoinType.LEFT);

若使用:Pageable进行分页查询时,在sqec里打断点会触发两次

Pageable pageable=PageRequest.of(current - Constants.1, pageSize, sort);
xxxRepository.findAll(spec, pageable);

通过打印sql发现,jpa查询了两次,一次记录查询,一次count 。
当查询结果数量超过一页时,jpa需要通过count语句查询数量。
此时count中不存在fetch指定的字段导致报错。
故需要增加判断条件,第二次经过断点查询count。当查询结果为Long时跳过。

  if (!criteriaQuery.getResultType().equals(Long.class)) {root.fetch("controlRate", JoinType.LEFT);}

使用fetch的原因

查询entity中使用了@OneToOne 一对一关联,导致jpa查询缓慢,查询sql增多,出现n+1的性能问题。

    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)@JoinColumn(name = "ccc", referencedColumnName = "id")private xxxEntity entity;

此时需要将急加载更换为懒加载,并在entity上方使用@NamedEntityGraph , 解决查询sql过多的问题。
entity:@NamedEntityGraph

 @NamedEntityGraph(name="xxxx.all",attributeNodes={@NamedAttributeNode("xxxEntity")})...@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)@JoinColumn(name = "ccc", referencedColumnName = "id")private xxxEntity entity;

repository中添加注解 @EntityGraph

@Repository
public interface xxxRepository extends JpaRepository<xxxEntity , Long>, JpaSpecificationExecutor<Long>  {/*** 通过Name查找** @param name  name* @return 对象*/@EntityGraph(value = "xxxx.all" , type= EntityGraph.EntityGraphType.FETCH)xxxEntity findByName(String name);}

可避免查询时产生过多sql语句的问题。
此时需关注使用Specification 查询的方法,Specification 中需增加 root.fetch(“字段名称” , “左连接”)完成级联查询。

 Specification<LoopEntity> spec = (root, criteriaQuery, criteriaBuilder) -> {...if (!criteriaQuery.getResultType().equals(Long.class)) {root.fetch("entity", JoinType.LEFT);}... criteriaQuery.where(predicate);}

jpa Specification fetch查询报错,query specified join fetching, but the owner of the fetched association相关推荐

  1. mybatis查询报错:com.mysql.cj.exceptions.DataConversionException: Cannot determine value type from string

    mybatis查询报错: com.mysql.cj.exceptions.DataConversionException: Cannot determine value type from strin ...

  2. mysql查询新建查询报错_mysql开启慢查询报错:

    1.进入mysql命令行:#mysql -uroot -p123456,执行下面的命令开启慢查询报错: set global slow_query_log=on; set global long_qu ...

  3. MySQL视图查询报错:Prepared statement needs to be re-prepared

    From: https://www.ywnds.com/?p=12609 今天公司的项目视图查询报错,报错如:ERROR 1615 (HY000): Prepared statement needs ...

  4. mysql分页查询报错,及解决

    mysql分页查询报错: 前提: 1.每页1000条数据 2.查到57页的时候,就报错了 以下是错误信息: org.springframework.jdbc.UncategorizedSQLExcep ...

  5. DB2单表排序查询报错分析及解决办法

    墨墨导读:客户DB2环境对单表的排序查询报错SQL1585N,本文模拟此报错并进行说明. 1. 报错如下 SQL1585N A temporary table could not be created ...

  6. 数据库查询报错Error Code 1064

    数据库查询报错Error Code 1064 原因是sql语句书写错误,里面的 '' 符号并不是单引号,而是键盘上的波浪号. 错误代码: SELECT * FROM 'test'.'user'; 正确 ...

  7. python sqlachemy模糊查询报错

    python通过sqlachemy连接postgre进行模糊查询报错,代码如下: from sqlalchemy import create_engine engine = create_engine ...

  8. mysql使用group by查询报错SELECT list is not in GROUP BY clause and contains nonaggregated column.

    mysql使用group by查询报错SELECT list is not in GROUP BY clause and contains nonaggregated column. 出现原因 使用g ...

  9. 数据库查询 报错 *****ORA-00918: 未明确定义列

    数据库查询 报错 *****ORA-00918: 未明确定义列:显然数据库不知道你写的列是指谁的列.一般单表查询不会出现这种错误,在多表联合查询的时候,在where 设定查询条件的地方,列名1=参数1 ...

最新文章

  1. 170万奖金扶持 华为云究竟在下一盘怎样的棋?
  2. 2017网易校招真题 合唱团
  3. linux网络编程九:splice函数,高效的零拷贝
  4. 如何写一个不带BOM的UTF8文件
  5. Oracle EBS:追踪PO全过程
  6. 协同过滤及大数据处理
  7. 《openstack-nova》use-novaclient 创建虚拟机(createvms.py)
  8. R语言中的read.table()
  9. Flash mx 课程指导大纲
  10. Zipf law 定律
  11. android 把file资源转file,Android文件管理器选择文件,获得文件路径URI转File
  12. 协方差矩阵及其计算方法
  13. flink写hive hdfs一直挂在.inprogress状态
  14. python少儿图形编程_少儿Python编程_第十六讲:图形界面开发
  15. Cesium资料汇总
  16. 达克效应:比绝望之谷更可怕的是迟迟未达到愚昧山峰
  17. 上帝在逃亡,撒旦在流浪
  18. 【算法】递归(recursion)+经典例题个人分析
  19. 计算机英语知识点,小学英语语法知识点汇总
  20. 功能软件(一):以IDM对抗百度网盘!

热门文章

  1. const定义及初始化约束
  2. 将扣出的章加入wps里面
  3. 超全 | 基于纯视觉Multi-Camera的3D感知方法汇总!
  4. android 提纲挈领
  5. 聚合微服务中的 Swagger API 文档
  6. 如何在知网下载硕士、博士论文PDF?
  7. 2022年全球与中国环己胺市场现状及未来发展趋势
  8. 74LS148+74LS47简易病房呼叫系统电路图
  9. Mac Book触摸板失灵的解决办法(触摸板按下失灵)
  10. 在IDEA开发一个自动输入法切换插件