【问题标题】:How to bind @Param for @Query annotations on repository methods in spring data mongodb?如何在spring data mongodb中为存储库方法上的@Query注释绑定@Param?
【发布时间】:2020-11-04 21:41:20
【问题描述】:

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

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

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

【问题讨论】:

  • 我认为它可能是这样的:@Query("{ bar: :#{#param1} }")
  • @Query(value = "{ 'bar': ?0}")
  • @Harshit,请重新阅读问题。我知道如何执行位置参数,但我正在尝试让绑定的命名参数起作用。
  • 抱歉造成误会。是的,你是对的,它与 @Query("{ bar: :#{#param1} }") 一起使用,被称为 SpEL

标签: spring-data-mongodb


【解决方案1】:

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

另外请注意,Collection 参数变量(如 ListSet)对于带有 @Query 注释的存储库查询方法不能正确转换,或者我一直在做错。相反,将集合转换为数组(在您的业务逻辑中)并将其作为数组传递给查询方法。这是另一个让我很困惑的方面。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多