如何使用createNativeQuery编写IN子句?
示例
codeList = "123 ,456";
然后我得到这样的codeList
:
CODE IN (:codeList)
但我无法获取数据。使用createNativeQuery编写IN子句的正确方法是什么?
答案 0 :(得分:3)
IN子句接受列表而不是字符串所以您应该做的是将此String转换为像这样的List然后设置参数
List<Integer> listCode = Stream.of(codeList.split("\\s*,\\s*"))
.map(Integer::valueOf)
.collect(toList());// this will return a list [123, 456]
query.setParameter("codeList", listCode);
当您尝试使用时:
query.setParameter("codeList", "123 ,456");
您的查询转换如下:
CODE IN ('123 ,456')
^________^-----------------this treated as a String not as a List
有一个解决方案可以将此参数与查询连接起来,但我不建议使用此解决方案!