JPQL查询where子句使用IN,如何将参数传递给查询

Posted

技术标签:

【中文标题】JPQL查询where子句使用IN,如何将参数传递给查询【英文标题】:JPQL query where clause using IN, How to pass the parameter to the query 【发布时间】:2018-06-18 00:01:27 【问题描述】:

我有 JPQL 查询,我得到以下查询的空结果。请看附件代码

String names = "'laptop','mobile'"; 
LoadContext testDataQuery = LoadContext.create(testData.class);
testDataQuery.setQuery(LoadContext.createQuery(
         "select pd from demo$TestData pd where pd.dataName.name in (:names)")
    .setParameter("measures", names)); 

List testDataQueryList = dataManager.loadList(testDataQuery); // Here I am getting empty list.

请告诉我,如何将名称传递给 JPQL where clasue for In。

谢谢!!

【问题讨论】:

将您的数据库 DDL 放入问题中并格式化您的代码。 【参考方案1】:

您可以将名称的List 添加到setParameter 方法中。

【讨论】:

【参考方案2】:

IN 参数使用List 而不是String。如果您将 names 声明更改为此,您的示例应该可以工作:

List<String> names = Arrays.asList("laptop", "mobile");

并保持其他所有内容不变。

注意你也可以去掉IN子句中的括号

pd.dataName.name in :names

希望这会有所帮助!

【讨论】:

以上是关于JPQL查询where子句使用IN,如何将参数传递给查询的主要内容,如果未能解决你的问题,请参考以下文章

JPQL订单实体通过将ID传递给IN子句

Spring JPA Hibernate JPQL 查找在 where 子句中传递的项目的索引

JPQL:如何使用 where 子句实现与集合成员声明相同的功能?

带有枚举值的 jpql IN 查询

HANA - 将字符串变量传递到 SQL 脚本中的 WHERE IN() 子句

JPQL IN 子句:Java 数组(或列表、集合...)?