存储库中的 JPA 查询命名参数问题

JPA Query named parameter issue in Repository

提问人:askwer 提问时间:6/30/2023 最后编辑:Dmitriy Popovaskwer 更新时间:6/30/2023 访问量:87

问:

我的存储库中有此方法:

@Query("""
SELECT items FROM ItemEntity items WHERE items.type = :type
AND (:idList IS NULL OR items.id IN :idList)
""")
List<Items> findItems(@Param("type") String type, @Param("idList") List<String> idList);

当是或只有 1 个项目时它有效,但它在包含超过 1 个项目时给了我一个:idListnullIndexOutOfBoundsExceptionidList

java.lang.IndexOutOfBoundsException: Index: 0
at java.base/java.util.Collections$EmptyList.get(Collections.java:4586) ~[na:na]

我不知道是什么原因造成的。

java spring-boot jpa 命名参数

评论

0赞 Sametcey 6/30/2023
在我看来,这个错误与JPA无关。我认为通过参数传递的 List<String> idList 确实是空的!你能检查一下你是否调用了方法findItems方法 System.out.println(“”+idList.length());列表的大小是多少?
0赞 askwer 6/30/2023
列表包含内容,但是当列表包含超过 1 个项目时,我会出现该错误。
0赞 Sametcey 6/30/2023
您是否尝试过 System.out.println(“”+idList.length());您调用 findItems 方法吗?请试试这个。因为 Exeptions 表示 List idList 是空的。
0赞 askwer 6/30/2023
是的,我在发布问题 System.out.println(“”+idList.size()) 之前就这样做了,因为它是集合框架中的列表。

答:

1赞 Mar-Z 6/30/2023 #1

添加括号,如下所示:

@Query("""
SELECT items FROM ItemEntity items WHERE items.type = :type
AND (:idList IS NULL OR items.id IN (:idList))
""")

评论

0赞 askwer 7/1/2023
试过这个,也是一样的 😩
0赞 Mar-Z 7/1/2023
请在类似情况下检查我的答案:stackoverflow.com/questions/76593358/...希望它有所帮助。
0赞 askwer 7/3/2023
嗨 @Mar-Z,coalesce(:idList) 起作用了。谢谢
0赞 Mar-Z 7/3/2023
凉。感谢您的反馈。我已经看到了coalesce(:idList)解决方案并尝试过,但它对我不起作用。至少不是 H2 数据库。