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

13 sql hibernate jpa in-operator sql-in

我们正在尝试为本机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();
Run Code Online (Sandbox Code Playgroud)

这不起作用,in子句不识别通过这种方式传递的任何值.有谁知道这个问题的解决方案?

top*_*hef 20

在您的情况下,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();
Run Code Online (Sandbox Code Playgroud)