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

标签 java jpa jpql

我构建了一个 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/

相关文章:

java - Java中从子类构造函数调用 super 构造函数

hibernate - 非法参数异常 : Not an entity - distributed model definitions in hibernate/jpa and Maven

spring - JPQL 多对多 - in 子句

java - 为什么我的 JPQL 不工作?

java - 不正确构造的对象是否只影响它在构造函数内发布的线程的可见性?

java - springboot 2.0.5集成websocket错误

java - 如何防止hibernate在多对多映射中插入一个表

java - JPA 连接运算符

java - 惊喜!!另一个ListView死胡同..LV不会显示

java - ReferenceUrl 的 Liquibase JPA 配置