0

我正在使用带有 spring-data-mongodb 的最新 Spring Boot,我试图将带有 @Param 的存储库方法参数绑定到 @Query 注释中的查询。我已经看到了几个使用 JPA 的 spring 数据示例,但对于 spring-data-mongodb 来说并不多。这是我尝试过的:

@Query(value = "{ 'bar': :param1 }")
FooModel getFooBySomeParam(@Param("param1") final String p1);

我目前不在工作,所以我没有具体的错误,但错误是在解析查询字符串时。它正在寻找一个值,但找到了一个冒号。我假设我错误地指定了命名参数,因此当它在参数名称之前遇到前导冒号时解析失败,但我还没有看到如何使用 mongodb 存储库以不同的方式执行此操作。

4

1 回答 1

0

对于任何试图为 spring-data-mongodb 解决这个问题的人来说,它与 spring-data-jpa 版本不同。您不能只使用冒号作为绑定参数名称的前缀。很高兴知道为什么 Spring 开发人员在这里没有保持一致性,但是源代码显示绑定的参数名称可以被引用,:#{#boundParamName}或者?#{#boundParamName}当你有一个查询方法参数时,比如@Param("boundParamName") final String someStringValue.

另请注意,对于带有注释的存储库查询方法,Collection参数变量喜欢ListSet没有正确翻译@Query,或者我做错了。相反,将集合转换为数组(在您的业务逻辑中)并将其作为数组传递给查询方法。这是另一个让我绊倒了一段时间的方面。

希望这对将来的某人有所帮助。

于 2020-11-18T11:37:11.697 回答