Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

840
Visualizações
Spring data mongodb: el parámetro @Query opcional ya no funciona

Después de actualizar a spring data mongodb 1.10.1, recibo errores cuando ejecuto consultas como:

 @Query("{$and :[" + "{ $or : [ { $where: '?0 == null' } , { 'field1' : ?0 } ] }," + "{ $or : [ { $where: '?1 == null' } , { 'field2' : ?1 } ] }," + "]}") public Page<Entity> findAll(String param1, String param2)

Al verificar el error, veo que el parámetro dentro de la cláusula where no está citado y, como resultado, obtengo:

org.springframework.data.mongodb.UncategorizedMongoDbException: la consulta falló con el código de error 139 y el mensaje de error 'ReferenceError: test_param_value no está definido:

He visto algunas respuestas aquí que recomiendan esta forma de manejar parámetros opcionales (( spring-data-mongo - ¿parámetros de consulta opcionales? )) pero ya no funciona y parece que no puedo encontrar nada en el registro de cambios de versión.

about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

En caso de que alguien más esté interesado, logré encontrar una solución después de verificar un ticket similar en el proyecto Spring Data.

Parece que la forma en que estaba comprobando los parámetros nulos en la consulta no es una buena práctica. Esto es de un comentario de un desarrollador de Spring: "los marcadores de posición no están diseñados para componer claves/valores sino para vincular parámetros. Más allá de eso, el uso de marcadores de posición en cadenas entrecomilladas siempre es problemático en términos de escape. El uso de SpEL debería satisfacer sus necesidades".

Así que terminé usando SpEL para hacer las comprobaciones de los parámetros y funciona bien. Así es como se ve:

 @Query("{$and :[" + "?#{ [0] == null ? { $where : 'true'} : { 'field1' : [0] } }," + "?#{ [1] == null ? { $where : 'true'} : { 'field2' : [1] } }," + "]}") public Page<Entity> findAll(String param1, String param2, Pageable pageable);
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda