13

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

4

2 回答 2

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();
于 2009-05-07T05:47:21.473 回答
0

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

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

于 2009-05-06T23:25:36.853 回答