一尘不染

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

hibernate

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

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

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。建议做这种事情的方法是什么?

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


阅读 266

收藏
2020-06-20

共1个答案

一尘不染

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
  }
});
2020-06-20