Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

838
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda