涵叔叔 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 求帮我调试一下freefem代码
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图