SPRING|Java - 在查询中使用带有 SpEl 的 IN 子句

SPRING|Java - Use IN clause with SpEl in query

我有一个枚举 (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);

这通过了构建,应用程序运行但是当调用这个方法时我得到``没有找到名称角色的参数绑定!;嵌套异常是 java.lang.IllegalArgumentException:找不到名称角色的参数绑定!

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

看起来这是 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 可能会有帮助。