一尘不染

在本机SQL查询中使用IN子句

hibernate

我们正在尝试为本地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子句无法识别通过这种方式传入的任何值。有谁知道解决这个问题的方法吗?


阅读 279

收藏
2020-06-20

共1个答案

一尘不染

在您的情况下,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();
2020-06-20