3
respostas

AJUDA - consulta não funciona

meu repository herda de ReactiveMongoRepository e na minha entidade tenho apenas o id e o lojaId, mas na tabela tem mais dados só que n usei logo deixei só esses acontece que fazendo o Mono existsAllByLojaIdIn(List lojasIds); eu quero verificar se TODOS da lista existem no banco de dados, somente se todos existirem, é true, havendo um que não existe, é false mas ele já pega true logo de cara bastando um existir

o que devo fazer?

(já coloquei in, sem in, com all, sem all... nada foi)
3 respostas

Olá, Jade! Entendo sua frustração, mas vamos tentar resolver isso juntas.

O método existsAllByLojaIdIn(List<Integer> lojasIds) do Spring Data JPA verifica se existe algum registro com os lojaId presentes na lista fornecida. Como você mencionou, ele retorna true se encontrar pelo menos um registro que corresponda a qualquer lojaId na lista.

No entanto, o que você está tentando fazer é verificar se todos os lojaId da lista existem no banco de dados. Infelizmente, o Spring Data JPA não fornece uma maneira direta de fazer isso. Mas não se preocupe, ainda há uma solução.

Você pode tentar fazer uma consulta para cada lojaId na lista e verificar se cada uma delas existe. Aqui está um exemplo de como você pode fazer isso:

public Mono<Boolean> existsAll(List<Integer> lojasIds) {
    return Flux.fromIterable(lojasIds)
        .flatMap(id -> repository.existsByLojaId(id))
        .all(Boolean::booleanValue);
}

Neste exemplo, Flux.fromIterable(lojasIds) cria um Flux que emite cada lojaId na lista. flatMap(id -> repository.existsByLojaId(id)) faz uma consulta para cada lojaId e retorna um Flux de Boolean. Finalmente, .all(Boolean::booleanValue) verifica se todos os valores emitidos pelo Flux são true.

Espero que isso resolva seu problema. Lembre-se de que você pode precisar ajustar este exemplo para se adequar ao seu código existente.

Espero ter ajudado e bons estudos!

e o metodo que chamar este, como que eu faço para que, se for true, ele lance uma exception? tudo q eu tento o webflux n aceita, dai o flatmap não parece bom pq meu método é void e flatmap cairia em um contexto diferente, sugestões?

consegui com doonnext, não ta lançando o 404 como esperado, mas lança no console, mas tipo neste existsAll q vc mandou, tem como eu capturar o id da loja que não existe ? pq quero mandar na msg da exception, tipo não todos que não existem, mas achou um que não existe, já lança exception q manda a msg contendo qual é o id que não existe.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software