JPQL IN 子句:展开数组、列表和其他集合
在 Java 持久性查询语言 (JPQL) 中,IN 子句允许您指定用于比较的特定值的列表。但是,如果您需要比较一组值而不是单独列出它们,您可能想知道是否有办法在 JPQL 中执行此操作。
答案:
是的,在 JPA 2.0 及更高版本中,您可以在 IN 子句中指定要展开为其各个值的集合。为此:
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);
示例:
EclipseLink 中的以下示例检索名称与“foo”或“bar”匹配的所有 Item 对象:
String qlString = "select item from Item item where item.name IN :names"; Query q = em.createQuery(qlString, Item.class); Listnames = 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中文网其他相关文章!