首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JPQL IN子句: Java-Arrays (或Lists,set...)?

JPQL IN子句: Java-Arrays (或Lists,set...)?
EN

Stack Overflow用户
提问于 2010-05-05 18:21:56
回答 3查看 169.1K关注 0票数 124

我希望从我们的数据库中加载所有具有文本标记的对象,这些对象的文本标记设置为任意数量的小值中的任何一个。在SQL中实现这一点的逻辑方法是构建一个" in“子句。JPQL允许IN,但它似乎要求我直接为IN指定每个参数(如在中,"in (:in1,:in2,:in3)")。

有没有什么方法可以指定一个数组,或者一个列表(或者其他一些容器),可以将其展开为IN子句的值?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-08 18:25:07

我不确定JPA1.0是否适用,但你可以在JPA2.0中传递一个Collection

String qlString = "select item from Item item where item.name IN :names"; 
Query q = em.createQuery(qlString, Item.class);

List<String> names = Arrays.asList("foo", "bar");

q.setParameter("names", names);
List<Item> actual = q.getResultList();

assertNotNull(actual);
assertEquals(2, actual.size());

使用EclipseLInk进行了测试。在Hibernate 3.5.1中,您需要用括号将参数括起来:

String qlString = "select item from Item item where item.name IN (:names)";

但这是一个错误,前面示例中的JPQL查询是有效的JPQL。参见HHH-5126

票数 229
EN

Stack Overflow用户

发布于 2013-06-28 02:09:22

oracle的限制是1000个参数。该问题已由hibernate在版本4.1.7中解决,尽管将传递的参数列表拆分为500个see JIRA HHH-1123的组

票数 3
EN

Stack Overflow用户

发布于 2020-11-13 20:42:51

我遇到了这种sql的问题,我在in子句中给出了空列表(如果列表不为空,请始终检查它)。也许我的练习能帮到什么人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2772305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档