我建立了一个NamedQuery,看起来像这样:添加IN子句列表的JPA查询
@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
我知道我可以只建立一个字符串,并建立从整个查询,但我想避免的开销。有没有更好的方法来做到这一点?
相关问题:如果列表非常大,是否有任何建立这样的查询的好方法?
就是这样,谢谢。 – AlanObject 2010-12-08 16:19:38
不......我的情况正好相反。如果我使用:inclList,那么它不起作用。如果我使用IN(:inclList),那么它工作。 – 2012-11-24 10:27:53
另请注意提及:您的参数的类型必须是对象的集合(而非数组)。对象必须与字段的类型匹配。 .toString()不能替代类String – dube 2014-03-21 10:47:12