首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将IN子句列表添加到JPA查询

将IN子句列表添加到JPA查询
EN

Stack Overflow用户
提问于 2010-12-08 00:12:16
回答 4查看 301.2K关注 0票数 144

我构建了一个如下所示的NamedQuery:

代码语言:javascript
复制
@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参数中获取它?它只允许我编辑一个字符串。例如:

代码语言:javascript
复制
setParameter("inclList", "a") // works

setParameter("inclList", "a, b") // does not work

setParameter("inclList", "'a', 'b'") // does not work

setParameter("inclList", list) // throws an exception

我知道我可以只构建一个字符串并从中构建整个查询,但我想避免开销。有没有更好的方法来做这件事?

相关问题:如果列表非常大,有没有好的方法来构建这样的查询?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-08 00:29:13

在使用带有集合值参数的IN时,不需要(...)

代码语言:javascript
复制
@NamedQuery(name = "EventLog.viewDatesInclude", 
    query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND " 
    + "el.timeMark <= :dateTo AND " 
    + "el.name IN :inclList") 
票数 201
EN

Stack Overflow用户

发布于 2014-01-25 04:14:06

正确的JPA查询格式应该是:

代码语言:javascript
复制
el.name IN :inclList

如果你使用旧版本的Hibernate作为你的提供者,你必须这样写:

代码语言:javascript
复制
el.name IN (:inclList)

但这是一个错误(HHH-5126) (编辑:现在已经解决了)。

票数 92
EN

Stack Overflow用户

发布于 2011-12-24 08:02:47

代码语言:javascript
复制
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();
    }

适用于我的JPA 2,Jboss 7.0.2

票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4378824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档