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

马文

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

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版Oracle 11G

马克·安德烈

JPA仅在JPQL查询中支持在列表中使用集合作为列表文字参数,而在本机查询中则不支持。一些JPA提供程序将其作为专有功能来支持,但它不是JPA规范的一部分(请参阅https://stackoverflow.com/a/3145275/1285097)。

本机查询中的命名参数也不是JPA规范的一部分。它们的行为取决于持久性提供程序和/或JDBC驱动程序。

带有用于Oracle的JDBC驱动程序的Hibernate支持这两个功能。

List<String> selectedValues = Arrays.asList("STRING1", "STRING2");
final String parameterizedQuery = "select * from SOMETABLE where SOMEFIELD in (:selectedValues)";
return em.createNativeQuery(parameterizedQuery)
         .setParameter("selectedValues", selectedValues)
         .getResultList();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

如何在 SELECT 子句中使用子查询?

来自分类Dev

如何在 MySQL 的 FROM 子句中使用子查询?

来自分类Dev

如何在openquery where子句中使用子查询

来自分类Dev

在动态where子句中使用子查询

来自分类Dev

如何避免在IN子句中使用多个IF语句进行动态查询

来自分类Dev

在 where 子句中使用可变参数查询 SQL

来自分类Dev

如何在SQL中的SUM子句中使用not in子句

来自分类Dev

如何在orderby子句中将LINQ与动态参数一起使用

来自分类Dev

如何在使用python的orientdb查询的where子句中使用变量

来自分类Dev

如何在select子句中使用自定义索引查询cassandra表

来自分类Dev

如何在MySQL的WHERE子句中使用子查询表别名

来自分类Dev

如何在Laravel中查询的WHERE子句中使用正则表达式?

来自分类Dev

如何在Db2的JSON_OBJECT的VALUE子句中使用标量子查询?

来自分类Dev

如何在Laravel中查询的WHERE子句中使用正则表达式?

来自分类Dev

C#如何在Sql查询中的From子句中使用Combobox.Value

来自分类Dev

如何在IN子句中使用的函数中传递参数个数

来自分类Dev

如何在laravel中的where子句中使用apiResource路由参数

来自分类Dev

如何在IN子句中使用的函数中传递参数数量

来自分类Dev

如何在where子句中使用多个参数将Oracle转换为MS SQL?

来自分类Dev

如何在JPA中使用where子句

来自分类Dev

OleDbcommand:如何在参数中使用'In'-子句?

来自分类Dev

如何使用动态参数创建JPA查询?

来自分类Dev

如何在“(...)”子句中使用占位符?

来自分类Dev

Haskell-如何在where子句中使用<-

来自分类Dev

如何在select子句中使用并集?

来自分类Dev

我如何在Where子句中使用IFNULL

来自分类Dev

如何在WHERE子句中使用MySql MAX()

来自分类Dev

如何在UPDATE子句中使用ROW_NUMBER()?

Related 相关文章

  1. 1

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

  2. 2

    如何在 SELECT 子句中使用子查询?

  3. 3

    如何在 MySQL 的 FROM 子句中使用子查询?

  4. 4

    如何在openquery where子句中使用子查询

  5. 5

    在动态where子句中使用子查询

  6. 6

    如何避免在IN子句中使用多个IF语句进行动态查询

  7. 7

    在 where 子句中使用可变参数查询 SQL

  8. 8

    如何在SQL中的SUM子句中使用not in子句

  9. 9

    如何在orderby子句中将LINQ与动态参数一起使用

  10. 10

    如何在使用python的orientdb查询的where子句中使用变量

  11. 11

    如何在select子句中使用自定义索引查询cassandra表

  12. 12

    如何在MySQL的WHERE子句中使用子查询表别名

  13. 13

    如何在Laravel中查询的WHERE子句中使用正则表达式?

  14. 14

    如何在Db2的JSON_OBJECT的VALUE子句中使用标量子查询?

  15. 15

    如何在Laravel中查询的WHERE子句中使用正则表达式?

  16. 16

    C#如何在Sql查询中的From子句中使用Combobox.Value

  17. 17

    如何在IN子句中使用的函数中传递参数个数

  18. 18

    如何在laravel中的where子句中使用apiResource路由参数

  19. 19

    如何在IN子句中使用的函数中传递参数数量

  20. 20

    如何在where子句中使用多个参数将Oracle转换为MS SQL?

  21. 21

    如何在JPA中使用where子句

  22. 22

    OleDbcommand:如何在参数中使用'In'-子句?

  23. 23

    如何使用动态参数创建JPA查询?

  24. 24

    如何在“(...)”子句中使用占位符?

  25. 25

    Haskell-如何在where子句中使用<-

  26. 26

    如何在select子句中使用并集?

  27. 27

    我如何在Where子句中使用IFNULL

  28. 28

    如何在WHERE子句中使用MySql MAX()

  29. 29

    如何在UPDATE子句中使用ROW_NUMBER()?

热门标签

归档