Spring data mongodb: Optional @Query parameter no longer works -
after upgrading spring data mongodb 1.10.1, getting errors when running queries like:
@query("{$and :[" + "{ $or : [ { $where: '?0 == null' } , { 'field1' : ?0 } ] }," + "{ $or : [ { $where: '?1 == null' } , { 'field2' : ?1 } ] }," + "]}") public page<entity> findall(string param1, string param2) checking error see parameter inside clause not quoted , result get:
org.springframework.data.mongodb.uncategorizedmongodbexception: query failed error code 139 , error message 'referenceerror: test_param_value not defined :
i have seen few answers here recommending way of handling optional parameters ((spring-data-mongo - optional query parameters?)) no longer works , cannot seem find in release change log.
in case else interested, managed find workaround after checking similar ticket int spring data project.
it seems way checking null parameters in query not practice. spring developer comment: "placeholders not designed compose keys/values bind parameters. beyond that, placeholder use in quoted strings problematic in terms of escaping. using spel should suit needs"
so ended using spel checks on parameters , works fine. how looks:
@query("{$and :[" + "?#{ [0] == null ? { $where : 'true'} : { 'field1' : [0] } }," + "?#{ [1] == null ? { $where : 'true'} : { 'field2' : [1] } }," + "]}") public page<entity> findall(string param1, string param2, pageable pageable);
Comments
Post a Comment