使用 DataReadQuery 传递参数

问题描述 投票:0回答:1

我们将 EcipseLink 与基本 JPA 方法一起使用,但我正在尝试解决有关大型结果集的问题,因此我正在考虑尝试 DataReadQuery 和流式结果集。这是我的最终目标,但我无法运行基本查询。网上的文档似乎相当稀疏,所以我主要是即兴发挥。

Session session = manager.unwrap(Session.class);
DataReadQuery query = new DataReadQuery("select first_name from user_table where user_id = ?");
List<String> arguments = new ArrayList<>();
arguments.add("Bob");
session.executeQuery(query, arguments);

这是一个本机查询,而不是 JPQL(如果这很重要的话)。

它抛出:提供给查询执行的参数数量与查询定义中的参数数量不匹配。只有 1 个参数。看来我显然没有正确传递值。

java eclipselink
1个回答
0
投票

您正在做的事情存在两个潜在问题。

  1. EclipseLink 本机查询使用“#”来划分 SQL 中的参数 字符串。 '?'来自 JPA,并且可能有效,但您应该遵循 使用本机查询对象时的文档。
  2. 您没有指出 SQL 字符串有参数。您需要调用 query.addArgument("ParameterName") 来指示字符串具有参数,并按照执行查询时传入值的顺序执行此操作。

请参阅https://docs.oracle.com/cd/E15523_01/web.1111/b32441/qrybas.htm#CIHEBFID了解示例

© www.soinside.com 2019 - 2024. All rights reserved.