IN CLAUSE使用createNativeQuery

时间:2018-05-04 08:22:14

标签: java hibernate

如何使用createNativeQuery编写IN子句?

示例

codeList = "123 ,456";

然后我得到这样的codeList

CODE IN (:codeList)

但我无法获取数据。使用createNativeQuery编写IN子句的正确方法是什么?

1 个答案:

答案 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

有一个解决方案可以将此参数与查询连接起来,但我不建议使用此解决方案!