当前位置: 首页 > 面试题库 >

如何使用返回参数从Hibernate调用Oracle函数?

於德馨
2023-03-14
问题内容

我有一个内部进行一些修改的函数,它返回一个值。

最初的想法是做这样的事情:

protected Integer checkXXX(Long id, Long transId)
        throws Exception {
    final String sql = "SELECT MYSCHEMA.MYFUNC(" + id + ", "
            + transId + ") FROM DUAL";
    final BigDecimal nr = (BigDecimal) this.getHibernateTemplate()
            .getSessionFactory().getCurrentSession().createSQLQuery(sql)
            .uniqueResult();
    return nr.intValue();
}

不幸的是,这不适用于Oracle。建议做这种事情的方法是什么?

有没有办法从我的陈述中提取声明的变量?


问题答案:

Hibernate
Session提供了doWork()一种直接访问的方法java.sql.Connection。然后,您可以创建并用于java.sql.CallableStatement执行功能:

session.doWork(new Work() {
  public void execute(Connection connection) throws SQLException {
    CallableStatement call = connection.prepareCall("{ ? = call MYSCHEMA.MYFUNC(?,?) }");
    call.registerOutParameter( 1, Types.INTEGER ); // or whatever it is
    call.setLong(2, id);
    call.setLong(3, transId);
    call.execute();
    int result = call.getInt(1); // propagate this back to enclosing class
  }
});


 类似资料:
  • 问题内容: 我如何使这个小功能“ imageExists”返回ajax请求是否成功? 问题答案: 我相信您将必须使用同步模式并使用单独的变量来存储返回值。

  • 我找到了一些很好的SO链接(如何从异步回调函数返回值?以及从node.js中的回调函数返回值等),但它们并不是不能为我的问题提供解决方案。 我的问题:能够得到异步调用的结果,但我如何使用这个结果返回我的函数? 这里获取callBackResponse的值为true或false,并希望将该值用作:

  • 我在包规格中有记录类型: 和返回此类型的函数。我正在使用MyBatis与Spring的集成。如何调用(使用MyBatis XML映射器)这个函数并将结果映射到POJO对象?

  • 问题内容: 我有一个返回sys-refcursor的Oracle函数,当我使用Hibernate调用此函数时,出现以下异常。 我该如何解决? Oracle功能 我的实体班 在DAO中 问题答案: 可以通过以下方式使用EntityManager调用Oracle函数或存储过程。 对于Oracle功能 创建一个以sys_refcursor作为返回类型的函数 在实体类中,将函数定义为 对于Oracle存储

  • 问题内容: 我遇到了使用ojdbc14.jar从Java 1.6调用Oracle FUNCTION(不是存储过程)的问题。 我从远程服务器调用该函数时不知道该函数包含的内容,我所知道的是: 我需要使用的架构是:FCRLIVE.AP_CH_GET_ACCT_BALANCES 我正在尝试: 但是我一直在日志文件中看到这一点: 我称这个功能错了吗?或者这可能是什么? 在此先感谢您的帮助! 问题答案: 它

  • 问题内容: 我正在寻找一种更好的解决方案,以使用jQuery进行AJAX调用,使PHP文件返回一个数组,并将其作为Javascript数组从客户端发布。这是我一直在做的事情: PHP文件(Example.php): JS档案: 我目前的方法对我的口味来说有点太复杂了。 我想做的就是能够 在PHP方面,并在AJAX调用后将其直接转换为Javascript数组。 想法,有人吗? 问题答案: 使用JSO