我已经构建了一个看起来像这样的NamedQuery:
@NamedQuery(name = "EventLog.viewDatesInclude",
query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
+ "el.timeMark <= :dateTo AND "
+ "el.name IN (:inclList)")
Run Code Online (Sandbox Code Playgroud)
我想要做的是填写参数: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
Run Code Online (Sandbox Code Playgroud)
我知道我可以构建一个字符串并从中构建整个Query,但我想避免开销.有没有更好的方法呢?
相关问题:如果List非常大,有没有什么好的方法来构建这样的查询?
axt*_*avt 173
使用IN集合值参数时,您不需要(...):
@NamedQuery(name = "EventLog.viewDatesInclude",
query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
+ "el.timeMark <= :dateTo AND "
+ "el.name IN :inclList")
Run Code Online (Sandbox Code Playgroud)
小智 74
正确的JPA查询格式为:
el.name IN :inclList
Run Code Online (Sandbox Code Playgroud)
如果你使用旧版本的Hibernate作为你的提供者,你必须写:
el.name IN (:inclList)
Run Code Online (Sandbox Code Playgroud)
但这是一个错误(HHH-5126)(编辑:现在已经解决了).
use*_*134 29
public List<DealInfo> getDealInfos(List<String> dealIds) {
String queryStr = "SELECT NEW com.admin.entity.DealInfo(deal.url, deal.url, deal.url, deal.url, deal.price, deal.value) " + "FROM Deal AS deal where deal.id in :inclList";
TypedQuery<DealInfo> query = em.createQuery(queryStr, DealInfo.class);
query.setParameter("inclList", dealIds);
return query.getResultList();
}
Run Code Online (Sandbox Code Playgroud)
适用于JPA 2,Jboss 7.0.2
小智 8
您必须转换List为如下所示:
String[] valores = hierarquia.split(".");
List<String> lista = Arrays.asList(valores);
String jpqlQuery = "SELECT a " +
"FROM AcessoScr a " +
"WHERE a.scr IN :param ";
Query query = getEntityManager().createQuery(jpqlQuery, AcessoScr.class);
query.setParameter("param", lista);
List<AcessoScr> acessos = query.getResultList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
233076 次 |
| 最近记录: |