首页 >数据库 >mysql教程 >JPQL的IN子句可以直接处理集合吗?

JPQL的IN子句可以直接处理集合吗?

Susan Sarandon
Susan Sarandon原创
2024-12-28 19:06:11980浏览

Can JPQL's IN Clause Handle Collections Directly?

JPQL IN 子句:展开数组、列表和其他集合

在 Java 持久性查询语言 (JPQL) 中,IN 子句允许您指定用于比较的特定值的列表。但是,如果您需要比较一组值而不是单独列出它们,您可能想知道是否有办法在 JPQL 中执行此操作。

答案:

是的,在 JPA 2.0 及更高版本中,您可以在 IN 子句中指定要展开为其各个值的集合。为此:

  1. 定义 JPQL 查询: 使用 IN 子句和命名参数创建 JPQL 查询,例如:
String qlString = "select item from Item item where item.name IN :names";
  1. 创建集合:创建 Java 集合(例如,包含要检查的值的列表或集合。
  2. 设置参数: 在查询对象上使用 setParameter() 方法将集合作为指定名称的值传递参数:
Query q = em.createQuery(qlString, Item.class);
List<String> names = Arrays.asList("foo", "bar");
q.setParameter("names", names);

示例:

EclipseLink 中的以下示例检索名称与“foo”或“bar”匹配的所有 Item 对象:

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

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

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

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

注意事项Hibernate:

在 Hibernate 4 之前,您需要在 JPQL 查询中将参数括在括号中:

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

但是,这是 Hibernate 特定的扩展,而不是标准 JPQL 语法的一部分。

以上是JPQL的IN子句可以直接处理集合吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn