Rumah > pangkalan data > tutorial mysql > Bolehkah JPQL's IN Clause Mengendalikan Koleksi Secara Terus?

Bolehkah JPQL's IN Clause Mengendalikan Koleksi Secara Terus?

Susan Sarandon
Lepaskan: 2024-12-28 19:06:11
asal
1057 orang telah melayarinya

Can JPQL's IN Clause Handle Collections Directly?

JPQL IN Klausa: Menyahgulung Tatasusunan, Senarai dan Koleksi Lain

Dalam Java Persistence Query Language (JPQL), klausa IN membenarkan anda untuk menentukan senarai nilai khusus untuk perbandingan. Walau bagaimanapun, jika anda perlu membandingkan koleksi nilai dan bukannya menyenaraikannya secara individu, anda mungkin tertanya-tanya sama ada terdapat cara untuk melakukannya dalam JPQL.

Jawapan:

Ya, dalam JPA 2.0 dan lebih baru, anda boleh menentukan Koleksi dalam klausa IN untuk dibuka kepada nilai individunya. Untuk melakukan ini:

  1. Tentukan Pertanyaan JPQL: Buat pertanyaan JPQL dengan klausa IN dan parameter bernama, contohnya:
String qlString = "select item from Item item where item.name IN :names";
Salin selepas log masuk
  1. Buat Koleksi: Buat Koleksi Java (cth., Senarai atau Set) yang mengandungi nilai yang ingin anda semak.
  2. Tetapkan Parameter: Gunakan kaedah setParameter() pada objek Pertanyaan untuk menghantar Koleksi sebagai nilai untuk parameter yang dinamakan:
Query q = em.createQuery(qlString, Item.class);
List<String> names = Arrays.asList("foo", "bar");
q.setParameter("names", names);
Salin selepas log masuk

Contoh:

Contoh berikut dalam EclipseLink mendapatkan semula semua objek Item yang namanya sepadan sama ada "foo" atau "bar":

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());
Salin selepas log masuk

Nota untuk Hibernate:

Sebelum Hibernate 4, anda perlu mengelilingi parameter dalam kurungan dalam JPQL pertanyaan:

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

Walau bagaimanapun, ini adalah sambungan khusus Hibernate dan bukan sebahagian daripada sintaks JPQL standard.

Atas ialah kandungan terperinci Bolehkah JPQL's IN Clause Mengendalikan Koleksi Secara Terus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan