【问题标题】:Calling an oracle function from JPA从 JPA 调用 oracle 函数
【发布时间】:2011-08-06 23:39:43
【问题描述】:

我正在尝试从 JPA 类中调用一个简单的函数,该函数根据一些计算返回一个数字并具有以下定义。

'CREATE OR REPLACE FUNCTION CFB.FC_AMOUNT_CHECK(accountNumber IN VARCHAR2)
return NUMBER IS .....'

我正在尝试通过以下方式从 JPA 调用此函数。

StringBuilder sql = new StringBuilder("call CFB.FC_AMOUNT_CHECK(:accountNumber)");
Query query = em.createNativeQuery(sql.toString());
query.setParameter(1, '1234');
List<?> result = query.getResultList();

....

但是,当我执行这个类时,我总是得到以下异常:

java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [1]

我似乎无法理解 JPA 如何找不到参数 1....过去 4 个小时我一直在为此烦恼。谁能建议如何获得我想要的结果?

【问题讨论】:

  • 从未在 Hibernate 中工作过。不确定:这条线对吗? query.setParameter(1, '1234');
  • 是的,这是 JPA 中的有效语句。
  • 你可以试试query.setParameter("accountNumber", '1234'); 让我知道结果吗?
  • 也不确定为什么在用文字替换它时要使用绑定变量。如果可能,请更改此"call CFB.FC_AMOUNT_CHECK(accountNumber)",然后尝试query.setParameter("accountNumber", '1234');

标签: java oracle jpa


【解决方案1】:

如果您想在 JPA 选择查询中调用函数,请点击以下链接,它可以工作:

http://www.eclipse.org/eclipselink/documentation/2.5/jpa/extensions/j_func.htm

【讨论】:

    【解决方案2】:

    如果要按索引设置查询参数:

    query.setParameter(1, '1234');
    

    您需要更改查询中的命名参数,并将其替换为?,如下所示:

    StringBuilder sql = new StringBuilder("call CFB.FC_AMOUNT_CHECK(?)");
    

    【讨论】:

      猜你喜欢
      • 2018-02-02
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 2012-10-20
      • 1970-01-01
      相关资源
      最近更新 更多