我们正在尝试为本机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子句不识别通过这种方式传递的任何值。有谁知道这个问题的解决方案?
答案 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'
的单独参数。这可能有所帮助。
如果您的参数长度未定义,这当然可能会导致问题。