QueryDsl에서 isNull()과 isNotNull()을 언제 사용해야 하나?

Kyle_Kim·2022년 5월 4일
1

발단은 virtualJob이 null인 경우만 plus하고 spiMachineLM만 가지고 있는 객체를 선택하고 싶었다.

그래서 밑에와 같은 dsl을 입력했지만 쿼리를 돌려보자 아무것도 나오지 않았다.

 public List<SpiJob> searchSpiJob(SpiJobParam param){
        return queryFactory
            .selectFrom(spiJob)
            .innerJoin(spiMachineLM)
            .on(spiMachineLM.assetSeqno.eq(spiJob.asstSeqNo))
            .where( alwaysTrue()
            	###################### 이 문제의 핵심코드#####################
            	.and(spiJob.spiVirtualJob.isNull())
                .and(spiJob.spiMachineLM.isNotNull())
                ############################################################
                .and( spiJob.deleted.eq(false) )
                .and( betweenEndDateTime(param.getStartDay() , param.getEndDay()) )
                .and( likeJobName(param.getJobName()) )
                .and( likeMachineName(param.getMachineName()) )
                .and( likeLastModifier(param.getLastModifier()) )
            )
            .fetch();
    }
하지만 밑에와 같이 입력시 원하는 답을 찾음
  public List<SpiJob> searchSpiJob(SpiJobParam param){
        return queryFactory
            .selectFrom(spiJob)
            .innerJoin(spiMachineLM)
            .on(spiMachineLM.assetSeqno.eq(spiJob.asstSeqNo))
            .where( alwaysTrue()
                .and( spiJob.deleted.eq(false) )
                .and( betweenEndDateTime(param.getStartDay() , param.getEndDay()) )
                .and( likeJobName(param.getJobName()) )
                .and( likeMachineName(param.getMachineName()) )
                .and( likeLastModifier(param.getLastModifier()) )
            )
            .fetch();
    }

QueryDsl에서는 원치 않는걸 빼는거 보다 필요한것(isNotNull)을 조인하는것이 맞나보다!!!

profile
Make Things Right

0개의 댓글