首頁 > 資料庫 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板