【发布时间】:2014-02-24 09:21:45
【问题描述】:
我的问题是关于这种查询:
select * from SOMETABLE where SOMEFIELD in ('STRING1','STRING2');
前面的代码在 Sql Developer 中运行良好。 同样的静态查询也可以正常工作并返回一些结果;
Query nativeQuery = em.createNativeQuery(thePreviousQuery,new someResultSet());
return nativeQuery.getResultList();
但是当我尝试参数化这个时,我遇到了一个问题。
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();
我没有得到任何结果(但控制台中没有错误)。 当我查看日志时,我看到了这样的事情:
select * from SOMETABLE where SOMEFIELD in (?)
bind => [STRING1,STRING2]
我也尝试不使用引号(结果相似)或无序参数(:selectedValues),这会导致这样的错误:
SQL Error: Missing IN or OUT parameter at index:: 1
我最终尝试在参数中直接设置括号,而不是在查询中,但这也不起作用......
我可以在运行时构建我的查询,以匹配第一个(工作)案例,但我宁愿以正确的方式进行;因此,如果有人有想法,我会非常感兴趣地阅读它们!
仅供参考: JPA 1.0 版 甲骨文11G
【问题讨论】: