在本机 sql 查询中使用 IN 子句
Posted
技术标签:
【中文标题】在本机 sql 查询中使用 IN 子句【英文标题】:Using IN clause in a native sql query 【发布时间】:2010-10-24 08:05:57 【问题描述】:我们正在尝试为本地 sql 查询动态生成 IN 子句以返回 JPA 实体。 Hibernate 是我们的 JPA 提供者。我们的代码看起来像这样。
@NamedQuery(
name="fooQuery",
queryString="select f from Foo f where f.status in (?1)"
)
....
Query q = entityManager.createNamedQuery("fooQuery");
q.setParameter(1, "('NEW','OLD')");
return q.getResultList();
这不起作用,in 子句无法识别通过这种方式传入的任何值。有谁知道这个问题的解决方案吗?
【问题讨论】:
【参考方案1】:我建议不要对查询使用复合参数,而是将其单独拆分。不要指定('NEW','OLD')
;指定'NEW'
和'OLD'
的单独参数。这可能会有所帮助。
当然,如果您的参数长度未定义,这可能会导致问题。
【讨论】:
【参考方案2】:在您的情况下,JPA 支持命名列表参数:
@NamedQuery(
name="fooQuery",
queryString="select f from Foo f where f.status in (?1)"
)
Query q = entityManager.createNamedQuery("fooQuery");
List<String> listParameter = new ArrayList<>();
listParameter.add("NEW");
listParameter.add("OLD");
q.setParameter(1, listParameter);
return q.getResultList();
【讨论】:
这不是原生查询,所以我猜这不是一个可以接受的答案? JPA 将生成带有从 Java 列表参数化的 IN 子句的 SQL 查询 - 生成的 SQL 查询将包含本机 (SQL) IN 子句。以上是关于在本机 sql 查询中使用 IN 子句的主要内容,如果未能解决你的问题,请参考以下文章