【问题标题】:SPRING|Java - Use IN clause with SpEl in querySPRING|Java - 在查询中使用带有 SpEl 的 IN 子句
【发布时间】:2019-07-27 17:16:35
【问题描述】:

我有一个枚举 (ClubRole),它有一个方法从这个枚举中返回一组值。我尝试使用 SpEl 从查询内部调用此方法。

 @Query("select m from ClubMember m " +
    "where m.student = :student " +
    "and m.role in :#{#role.getParents()}"
  )
  List<ClubMember> findByRoleWithInheritance(@Param("student") Student student, @Param("role") ClubRole role);

这通过了构建,应用程序运行,但是当这个方法被调用时,我得到了``No parameter binding found for name role!;嵌套异常是 java.lang.IllegalArgumentException: No parameter binding found for name role!

我尝试了不同的方法,但都没有奏效。我想知道在这种情况下是否可以使用 SpEl,如果可以,如何使用?

【问题讨论】:

    标签: java jpa spring-el in-clause


    【解决方案1】:

    看起来这是 spring-data-jpa 中的一个问题。我可以看到人们在 spring-blog 上讨论同样的问题。不确定这是否存在未解决的问题。 您可以尝试以下解决方法。

    @Query("select m from ClubMember m " +
        "where m.student = :#{#student}" +
        "and m.role in :#{#role.getParents()}"
      )
      List<ClubMember> findByRoleWithInheritance(@Param("student") Student student, @Param("role") ClubRole role);
    

    或者您可以尝试对第二个参数进行索引访问,例如#{[1].getParents()}

    this 可能会有所帮助。

    【讨论】:

    • 如果您的问题得到解决,您能否将其标记为已接受? .它也会帮助其他人。
    • 刚刚做了。但是,该解决方案非常针对我的问题,所以我不知道它是否会帮助其他人。 “错误”如果是一个则非常奇怪
    • 谢谢!!你不是第一个得到这个错误的人:) 我会为此打开一个问题
    • 好电话,我也发现了很多与 SpEL 的 IN 子句类似的问题。这个话题stackoverflow.com/questions/29127723/… 谈到了一个问题,但据说已经修复了。
    猜你喜欢
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多