相关疑难解决方法(0)

如何在JPA命名查询的IN子句中使用动态参数?

我的问题是关于这种查询:

select * from SOMETABLE where SOMEFIELD in ('STRING1','STRING2');
Run Code Online (Sandbox Code Playgroud)

以前的代码在Sql Developer中工作正常.相同的静态查询也可以正常工作,并返回一些结果;

Query nativeQuery = em.createNativeQuery(thePreviousQuery,new someResultSet());
return nativeQuery.getResultList();
Run Code Online (Sandbox Code Playgroud)

但是当我尝试参数化时,我遇到了一个问题.

final String parameterizedQuery = "select * from SOMETABLE where SOMEFIELD in (?selectedValues)";
Query nativeQuery = em.createNativeQuery(parameterizedQuery ,new someResultSet());
nativeQuery.setParameter("selectedValues","'STRING1','STRING2'");
return nativeQuery.getResultList();
Run Code Online (Sandbox Code Playgroud)

我没有结果(但在控制台没有错误).当我查看日志时,我看到了这样的事情:

select * from SOMETABLE where SOMEFIELD in (?)
bind => [STRING1,STRING2]
Run Code Online (Sandbox Code Playgroud)

我也尝试不使用引号(具有类似结果)或非有序参数(:selectedValues),这会导致这样的错误:

SQL Error: Missing IN or OUT parameter at index:: 1
Run Code Online (Sandbox Code Playgroud)

我最终试图直接在参数中设置括号,而不是查询,但这也不起作用......

我可以在运行时构建我的查询,以匹配第一个(工作)情况,但我宁愿以正确的方式执行; 因此,如果有人有想法,我会非常感兴趣地阅读它们!

仅供参考:JPA版本1.0 Oracle 11G

sql oracle jpa oracle11g

15
推荐指数
1
解决办法
7万
查看次数

在本机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子句不识别通过这种方式传递的任何值.有谁知道这个问题的解决方案?

sql hibernate jpa in-operator sql-in

13
推荐指数
1
解决办法
2万
查看次数

标签 统计

jpa ×2

sql ×2

hibernate ×1

in-operator ×1

oracle ×1

oracle11g ×1

sql-in ×1