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

时间:2009-05-06 21:58:48

标签: 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();

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

2 个答案:

答案 0 :(得分:19)

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();

答案 1 :(得分:0)

我建议不要为查询使用复合参数,而是将其单独拆分。不要指定('NEW','OLD');指定'NEW''OLD'的单独参数。这可能有所帮助。

如果您的参数长度未定义,这当然可能会导致问题。