ฉันได้สร้าง NamedQuery ที่มีลักษณะดังนี้:
@NamedQuery(name = "EventLog.viewDatesInclude",
query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
+ "el.timeMark <= :dateTo AND "
+ "el.name IN (:inclList)")
สิ่งที่ฉันต้องการทำคือกรอกพารามิเตอร์: inclList ด้วยรายการของรายการแทนที่จะเป็นรายการเดียว ตัวอย่างเช่นหากฉันมีฉันจะหาnew List<String>() { "a", "b", "c" }
สิ่งนั้นในพารามิเตอร์: inclList ได้อย่างไร มันช่วยให้ฉันเข้ารหัสหนึ่งสตริงเท่านั้น ตัวอย่างเช่น:
setParameter("inclList", "a") // works
setParameter("inclList", "a, b") // does not work
setParameter("inclList", "'a', 'b'") // does not work
setParameter("inclList", list) // throws an exception
ฉันรู้ว่าฉันสามารถสร้างสตริงและสร้างแบบสอบถามทั้งหมดจากสิ่งนั้น แต่ฉันต้องการหลีกเลี่ยงค่าใช้จ่าย มีวิธีที่ดีกว่านี้หรือไม่?
คำถามที่เกี่ยวข้อง: ถ้ารายการมีขนาดใหญ่มากมีวิธีใดที่ดีในการสร้างแบบสอบถามแบบนั้นหรือไม่?