涵叔叔 2020-09-28 09:13 采纳率: 81.8%
浏览 308
已采纳

QueyDSL+jpa 可以做到if判断成立后再对数据库某个字段进行去重吗?

QueyDSL+jpa 可以做到if判断成立后再对数据库某个字段进行去重吗,比如下面的实时与历史,如果是实时的话就对sn进行排序,selectDistinct的方式是不行的,而直接在紧接着的投影DTO对象加 distinct好像也不行

    @Transactional(rollbackFor = Exception.class)
    public Page<TAedWarn> findAll(TWarn dto, Pageable pageable, String city, Long userId) {

        JPAQuery jpaQuery = jpaQueryFactory.selectDistinct(Projections.bean(TAedWarn.class,
                QDevice.Device.sn,
                QDevice.Device.model,
                QWarn.Warn.id, //就是这里直接加distinct好像也不能去重
                QWarn.Warn.type,
                QWarn.Warn.readers))
                .from(Warn.Warn).leftJoin(QDevice.Device).on(QWarn.Warn.deviceid.eq(QDevice.Device.id));

//判断是否进行条件查询
        if (null != dto) {
            //设备序列号
            if (!StringUtils.isEmpty(dto.getSn()) && null != dto.getAccurateAndFuzzy()) {
                //进行判断,是进行条件查询还是模糊查询
                if (dto.getAccurateAndFuzzy() == AccurateAndFuzzy.ACCURATE.getCode()) {
                    jpaQuery.where(QDevice.Device.sn.eq(dto.getSn()));
                }
                if (dto.getAccurateAndFuzzy() == AccurateAndFuzzy.FUZZY.getCode()) {
                    jpaQuery.where(Device.Device.sn.contains(dto.getSn()));
                }
            }

            //安装位置
            if (null != dto.getSetupposition()) {
                jpaQuery.where(QDevice.Device.setupposition.contains(dto.getSetupposition()));
            }
            //实时与历史 0:实时 1历史  可不可以加入如果是0的话就对 sn进行去重操作 1的话正常查询
            if (null != dto.getTimeType() && TimeType.NOW.getCode() == dto.getTimeType()) {
                jpaQuery.where(QWarn.Warn.handled.eq(TimeType.NOW.getCode()));
            }
            if (null != dto.getTimeType() && TimeType.HISTORY.getCode() == dto.getTimeType()) {
                jpaQuery.where(QWarn.Warn.handled.eq(TimeType.HISTORY.getCode()));
            }
        }

        //用户所处城市可见
        jpaQuery.where(QAedDevice.aedDevice.setupcity.eq(city);
        // 默认分页
        jpaQuery.offset(pageable.getOffset()).limit(pageable.getPageSize());
        QueryResults<TAedWarn> results = jpaQuery.fetchResults();

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-09-28 10:19
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 1月7日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境