我有一个内部进行一些修改的函数,它返回一个值。
最初的想法是做这样的事情:
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执行功能:
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 } });