我构建了一个 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
我知道我可以只构建一个字符串并从中构建整个查询,但我想避免开销。有更好的方法吗?
相关问题:如果列表非常大,有没有像这样构建查询的好方法?
最佳答案
当使用带有集合值参数的 IN
时,您不需要 (...)
:
@NamedQuery(name = "EventLog.viewDatesInclude",
query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
+ "el.timeMark <= :dateTo AND "
+ "el.name IN :inclList")
关于java - 将 IN 子句列表添加到 JPA 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4378824/