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

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日

悬赏问题

  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥85 maple软件,solve求反函数,出现rootof怎么办?
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题