在本机 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 子句无法识别通过这种方式传入的任何值。 有谁知道这个问题的解决方案?
We are trying to dynamically generate an IN clause for a native sql query to return a JPA entity. Hibernate is our JPA provider. Our code looks something like this.
@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();
This doesn't work, the in clause does not recognize any of the values passed in via this manner. Does anyone know of a solution to this problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
JPA 支持命名列表参数,在您的情况下:
JPA supports named list parameters, in your case:
我建议不要对查询使用复合参数,而是将其单独拆分。 不要指定
('NEW','OLD')
; 指定'NEW'
和'OLD'
的单独参数。 这可能有帮助。当然,如果您的参数长度未定义,这可能会导致问题。
I would recommend to not use a composite parameter for your query, but to split it out individually. Don't specify
('NEW','OLD')
; specify separate parameters of'NEW'
and'OLD'
. That may help.This, of course, may cause problems if your parameter lengths are undefined.