Saya telah membuat NamedQuery yang terlihat seperti ini:
@NamedQuery(name = "EventLog.viewDatesInclude",
query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
+ "el.timeMark <= :dateTo AND "
+ "el.name IN (:inclList)")
Yang ingin saya lakukan adalah mengisi parameter: inclList dengan daftar item, bukan satu item. Misalnya jika saya punya new List<String>() { "a", "b", "c" }
bagaimana cara mendapatkannya di parameter: inclList? Ini hanya memungkinkan saya menyusun satu string. Sebagai contoh:
setParameter("inclList", "a") // works
setParameter("inclList", "a, b") // does not work
setParameter("inclList", "'a', 'b'") // does not work
setParameter("inclList", list) // throws an exception
Saya tahu saya bisa membuat string dan membangun seluruh Query dari situ, tapi saya ingin menghindari overhead. Apakah ada cara yang lebih baik untuk melakukan ini?
Pertanyaan terkait: jika List sangat besar, adakah cara yang baik untuk membuat kueri seperti itu?
Jawaban:
Saat menggunakan
IN
dengan parameter nilai koleksi, Anda tidak memerlukan(...)
:sumber
Format kueri JPA yang tepat adalah:
Jika Anda menggunakan versi Hibernate yang lebih lama sebagai penyedia Anda, Anda harus menulis:
tetapi itu adalah bug ( HHH-5126 ) (EDIT: yang telah diselesaikan sekarang).
sumber
Bekerja untuk saya dengan JPA 2, Jboss 7.0.2
sumber
Anda harus mengonversi menjadi
List
seperti yang ditunjukkan di bawah ini:sumber