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

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

Susan Sarandon
发布: 2024-12-28 19:06:11
原创
940 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板