首頁 >資料庫 >mysql教程 >JPQL的IN子句可以直接處理集合嗎?

JPQL的IN子句可以直接處理集合嗎?

Susan Sarandon
Susan Sarandon原創
2024-12-28 19:06:11994瀏覽

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