1
resposta

IF com parametro dentro da query

Boa tarde, tenho uma dúvida. Se por acaso eu for fazer uma query native, e precisar fazer uma if dentro dela usando um parametro que virá na chamada, algo mais ou menos assim:

    case 
          when :variavel=1 then 
          inner join" +
         primeiroInnerJoin
         else " +
       inner join
       segundoInnerJoin
    end

A ":variavel" é uma variavel que virá na chamada da minha native query, como faço para verificar o valor desta variavel e alterar a query dependendo do valor da variavel?

1 resposta

Usando QueryDSL você poderia fazer algo como:

  public Predicate createPredicate(DataEntity dataEntity) {
    QDataEntity qDataEntity = QDataEntity.dataEntity;
    BooleanBuilder booleanBuilder = new BooleanBuilder();
    if (!StringUtils.isEmpty(dataEntity.getCnsiConsumerNo())) {
      booleanBuilder
        .or(qDataEntity.cnsiConsumerNo.contains(dataEntity.getCnsiConsumerNo()));
    }
    if (!StringUtils.isEmpty(dataEntity.getCnsiMeterNo())) {
      booleanBuilder.or(qDataEntity.cnsiMeterNo.contains(dataEntity.getCnsiMeterNo()));
    }

    return booleanBuilder.getValue();
  }

Ou usando Criteria query, exemplo: https://www.baeldung.com/jpa-and-or-criteria-predicates