@Autowired
private JPAQueryFactory queryFactory;
//联表查询操作
1>
QMmFileDefEntity qDefEntity = QMmFileDefEntity.mmFileDefEntity;
QMmFileDtlEntity qDtlEntity = QMmFileDtlEntity.mmFileDtlEntity;
QMmLinkEntity qLinkEntity = QMmLinkEntity.mmLinkEntity;
JPAQuery<Tuple> tupleJPAQuery = queryFactory.select(qDefEntity,qDtlEntity).from(qDtlEntity).innerJoin(qDefEntity).on(qDefEntity.defId.eq(qDtlEntity.defId)).leftJoin(qLinkEntity).on(qLinkEntity.sourceId.eq(qDtlEntity.mediaId).and(qLinkEntity.sourceTable.eq(DefaultsValue.MM_FILE_DTL)).and(qLinkEntity.sourceType.in(setEpisodeSourceType())).and(qLinkEntity.showType.in(MediaConstant.ShowType.HORIZONTAL_COVER.getCode(),MediaConstant.ShowType.VERTICAL_COVER.getCode())).and(qLinkEntity.dflag.eq(DefaultsValue.BYTE_TWO))).where(qDtlEntity.dflag.eq(DefaultsValue.BYTE_TWO).and(qDefEntity.mediaType.eq(MediaConstant.MediaType.VIDEO.getCode())));

2>

List<Tuple> tuples = queryFactory.select(qDtlEntity,qLinkEntity).from(qDtlEntity).innerJoin(qLinkEntity).on(qLinkEntity.sourceId.in(bo.getMediaIds()).and(qLinkEntity.sourceTable.eq(DefaultsValue.MM_FILE_DTL).and(qLinkEntity.mediaType.eq(MediaConstant.MediaType.VIDEO.getCode())).and(qLinkEntity.sourceType.in(getVideoSourceType())))).where(qDtlEntity.mediaId.in(bo.getMediaIds()).and(qDtlEntity.dflag.eq(DefaultsValue.BYTE_TWO))).fetch();

3>

List<Tuple> dtlTuples = queryFactory.select(qDtlEntity.defId,qDtlEntity.mediaId.max(),qDtlEntity.gmtModified,qDtlEntity.sort,qDtlEntity.count(),qDtlEntity.dtlName,qDtlEntity.collectTotal,qDtlEntity.likeTotal,qDtlEntity.playTotal,qDtlEntity.shareTotal,qDtlEntity.vedioId).from(qDtlEntity).where(qDtlEntity.defId.in(bo.getDefIds()).and(qDtlEntity.dflag.eq(DefaultsValue.BYTE_TWO))).groupBy(qDtlEntity.defId).fetch();
Set<Long> defIds = new HashSet<>();
tuples.forEach(row -> {MmFileDtlEntity dtlEntity = row.get(qDtlEntity);VideoPlayListVo vo = new VideoPlayListVo();dtlConversionCollectionPlayVo(vo,dtlEntity);vo.setCurrentMediaId(dtlEntity.getMediaId());vo.setMediaId(null);MmLinkEntity linkEntity = row.get(qLinkEntity);vo.setDuration(linkEntity.getDuration());listVos.add(vo);defIds.add(dtlEntity.getDefId());
});

//子查询操作

JPAQuery<MmFileDefEntity> query = queryFactory.selectFrom(qDefEntity).where(qDefEntity.mediaType.eq(MediaConstant.MediaType.VIDEO.getCode()).and(qDefEntity.cateType.eq(MediaConstant.CateType.WEMEDIA.getCode()).or(qDefEntity.cateType.eq(MediaConstant.CateType.VIDEO.getCode()).and(qDefEntity.cateCode.eq(SysCategroupEnums.CEnName.TVPLAY.getCEnName())))).and(qDefEntity.dflag.eq(DefaultsValue.BYTE_TWO)).and(JPAExpressions.select(qDtlEntity.count()).from(qDtlEntity).where(qDtlEntity.defId.eq(qDefEntity.defId).and(qDtlEntity.dflag.eq(DefaultsValue.BYTE_TWO))).groupBy(qDtlEntity.defId).goe(DefaultsValue.LONG_ONE)));

//

JPAQueryFactory 多条件动态查询
public RestVo<PageVo<VideoListVo>> videoReviewList(PageBo<VideoListBo> bo){//TODO 入参组装查询JPAQuery<Tuple> jDtlEntityQuery = queryVideoList(bo);long total = jDtlEntityQuery.fetchCount();List<Tuple> results = jDtlEntityQuery.offset((bo.getPage() - 1) * bo.getSize()).limit(bo.getSize()).fetch();
}
private JPAQuery<Tuple> queryVideoList(PageBo<VideoListBo> bo){QMmFileDefEntity qDefEntity = QMmFileDefEntity.mmFileDefEntity;QMmFileDtlEntity qDtlEntity = QMmFileDtlEntity.mmFileDtlEntity;QMmLinkEntity qLinkEntity = QMmLinkEntity.mmLinkEntity;JPAQuery<Tuple> tupleJPAQuery = queryFactory.select(qDefEntity,qDtlEntity).from(qDtlEntity).innerJoin(qDefEntity).on(qDefEntity.defId.eq(qDtlEntity.defId)).leftJoin(qLinkEntity).on(qLinkEntity.sourceId.eq(qDtlEntity.mediaId).and(qLinkEntity.sourceTable.eq(DefaultsValue.MM_FILE_DTL)).and(qLinkEntity.sourceType.in(setEpisodeSourceType())).and(qLinkEntity.showType.in(MediaConstant.ShowType.HORIZONTAL_COVER.getCode(),MediaConstant.ShowType.VERTICAL_COVER.getCode())).and(qLinkEntity.dflag.eq(DefaultsValue.BYTE_TWO)));//类似1=1Predicate predicate = qDefEntity.isNotNull().or(qDefEntity.isNull());if(null != bo.getParam()){String regx = "^[1-9]\\d*$";Pattern pattern = Pattern.compile(regx);if(StringUtils.isNotBlank(bo.getParam().getUserParam())){if(pattern.matcher(bo.getParam().getUserParam()).matches()){predicate = ExpressionUtils.and(predicate,qDefEntity.userId.eq(Long.valueOf(bo.getParam().getUserParam())).or(qDefEntity.nickName.likeIgnoreCase(bo.getParam().getUserParam())));}else {predicate = ExpressionUtils.and(predicate,qDefEntity.nickName.likeIgnoreCase(bo.getParam().getUserParam()));}}if(null != bo.getParam().getCheckStatus()){if(MediaConstant.PersonCheck.CHECKING.getCode() == bo.getParam().getCheckStatus()){predicate = ExpressionUtils.and(predicate,qDtlEntity.machineCheck.eq(bo.getParam().getCheckStatus()));}else if(MediaConstant.PersonCheck.NORMAL.getCode() == bo.getParam().getCheckStatus()){predicate = ExpressionUtils.and(predicate,qDtlEntity.fileStatus.eq(MediaConstant.FileStatus.NORMAL_FILE_STATUS.getCode()));}else if(MediaConstant.PersonCheck.NOT_PASS.getCode() == bo.getParam().getCheckStatus()){predicate = ExpressionUtils.and(predicate,qDtlEntity.fileStatus.ne(MediaConstant.FileStatus.NORMAL_FILE_STATUS.getCode()));}}if(StringUtils.isNotBlank(bo.getParam().getStar())){predicate = ExpressionUtils.and(predicate,qDefEntity.star.eq(bo.getParam().getStar()));}}predicate = ExpressionUtils.and(predicate,qDtlEntity.dflag.eq(DefaultsValue.BYTE_TWO).and(qDefEntity.mediaType.eq(MediaConstant.MediaType.VIDEO.getCode())));return tupleJPAQuery.where(predicate);
}

参考:https://blog.csdn.net/phapha1996/article/details/83614975

JPA 链表查询,子查询操作相关推荐

  1. sql 基础语法 创建数据库和数据表 数据增删改查 分组查询 子查询回顾

    参考链接: SQL教程 MySQL教程 一.创建数据库语法 --用master数据库 use master --判断数据库是否存在,若存在则删除 if exists (select * from sy ...

  2. 数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引

    1.    oracle介绍 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的 ...

  3. MySQL数据库多表查询,子查询

    写博客的第四天,今天来点数据库的操作,温故而知新,在前进的路上,多看看自己曾经走过的路,不要忘了自己是怎么一步一步走过来的,对于前方未知的道路,不要轻言放弃. 今天的内容全部是MySQL里面的语句,基 ...

  4. 聚合查询+联合查询+子查询

    文章目录 一.聚合查询 1.聚合函数 2.GROUP BY子句 3.HAVING 二.联合查询 join on 1.内连接 2.外连接 3.自连接 三.子查询 EXISTS关键字 四.联合查询 总结 ...

  5. MySQL核心查询-排序 分组 聚合 多表查询 合并查询 子查询

    目录 一.单表查询 排序 聚合函数 分组 limit关键字 二.SQL约束 主键的自增 DELETE和TRUNCATE对自增长的影响 三.多表查询 外键约束 删除外键约束 多表查询的分类 内连接查询 ...

  6. oracle子查询子查询,Oracle 单行子查询和多行子查询

    --什么是单行子查询? --从子查询中返回一行结果的查询 select e.employee_id,e.last_name,e.salary from employees e where e.depa ...

  7. 分组分页连接查询子查询9202-0422

    分组查询 查询当前宠物有哪些组 分组成功后,就不要再使用数据行的字段来查询了 获得分组后的数据 求和 limit分页显示 内连接查询 宠物表与主人表是有关联的 有的宠物是有主人的 获得宠物与主人的关系 ...

  8. mysql求和 子查询_MYSQL 查询方法 统计查询 链接查询 子查询

    mysql表格查询方法: 查询: 1.简单查询 select * from Info --查所有数据 select Code,Name from Info --查指定列的数据 select Code ...

  9. SQL查询,子查询作为结果字段

    SQL查询,子查询作为结果字段, SELECT DISTINCTsp.comcode,sp.projectname,sp.projecttime,sp.busnature,sp.bustype,sl. ...

  10. 数据库学习之MySQL (十七)—— SQL99 主查询 与 子查询 子查询分类之WHERE的子查询

    文章目录 主查询 子查询 纲举目张--子查询的分类 WHERE语句后的 子查询 主查询 子查询 概念集中于SELECT语句 之前我们所学习的所有,都是SELECT作为独立的一句 是主干,是爸爸 后面跟 ...

最新文章

  1. Tomcat5集群中的SESSION复制详解
  2. 计算机专业有python课程吗-作为计算机专业学生,最应该学习的课程前五位是什么?...
  3. Android之UI控件
  4. java angularjs 跨域访问_angularjs跨域post解决方案
  5. css设置字符长度,在css中设置最大字符长度
  6. 分享一个JAVA专业接口开发利器,牛牛牛新鲜出炉!!!
  7. 移动前端的一些必备知识
  8. 教育部双一流计算机科学与技术,双一流大学及学科详情.pdf
  9. 教你查看网页的记住密码和免费下载付费音乐
  10. 实现LOL游戏中英雄技能的释放
  11. (C语言)signed和unsigned类型转化
  12. PMP笔记 第3章 项目经理的角色
  13. Good Bye 2022: 2023 is NEAR 题解
  14. codeforces E. Sum of Digits
  15. google的搜索技巧
  16. kali虚拟机安装及配置
  17. 科目一考试重难点速考笔记
  18. 【牛客多校第十场】Coffee Chicken
  19. APM 新版电机电调校准
  20. GPS七参数计算工具

热门文章

  1. 两行轨道根数norad_极客历史记录的本周:NORAD跟踪圣诞老人,第一个HTTP测试,巴贝奇诞辰...
  2. 光纤分类——多模和单模
  3. git 配置ssh 秘钥
  4. 「C++简单实现斗地主」机关算尽的地主,却低估了我的实力
  5. 嘉楠科技任命成进为首席财务官:高管变动频繁,多名核心股东减持
  6. J2SE5.0新特性之范型编程
  7. 覆盖vue.js样式_使用Vue.js和Cloudinary在化身上覆盖眼镜/面罩
  8. 洛谷 P3386 【模板】二分图匹配
  9. Mybatis方法入参处理
  10. 文献速递第3期:tDCS的近期研究