hibernate 调用oracle存储过程 问题
有这样一个oracle存储过程 proc1
CREATE OR REPLACE PROCEDURE proc1(
? v_date in number,
? v_cursor OUT SYS_REFCURSOR
? )
AS
??
BEGIN
?OPEN v_cursor FOR
?SELECT id, create_date, ref_no
?FROM REP_NETYUAN_SETTLE
?where create_date = v_date
? and ref_no is not null
?;
END;
hbm.xml文件是这样的
<hibernate-mapping>
<class name="com.ctsi.zhjs.common.po.RepNetyuanSettle2"
table="REP_NETYUAN_SETTLE">
<id name="id" type="java.lang.Long">
<column name="ID" precision="15" scale="0" />
<generator class="assigned" />
</id>
<property name="createDate" type="java.lang.Long">
<column name="CREATE_DATE" precision="8" scale="0"
not-null="true" />
</property>
<property name="refNo" type="java.lang.String">
<column name="REF_NO" length="20" />
</property>
</class>
<sql-query name="SELECT_REPNETYUAN_SETTLE" callable="true">
<return alias="rns"
class="com.ctsi.zhjs.common.po.RepNetyuanSettle2">
<return-property name="id" column="ID" />
<return-property name="createDate" column="CREATE_DATE" />
<return-property name="refNo" column="REF_NO" />
</return>
{ call proc1( ? ) }
</sql-query>
</hibernate-mapping>
我的存储过程有2个参数,1个in参数,1个out参数,我这里应该怎么写呢
调用代码 是这样的
public void doTest() {
Query query = this.getSession().getNamedQuery("SELECT_REPNETYUAN_SETTLE");
query.setInteger(1, 20080308);
List list = query.list();
}
运行结果报错,?
[解决办法]
Oracle存储过程的第一个参数必须是返回结果集的OUT参数
[解决办法]
1、修改存储过程,把out参数作为存储过程的第一个参数
2、hibernate.cfg.xml中调用存储过程的写法为:{ call proc1(?, ?) }
3、代码应该为:query.setInteger(0,20080308)
上面的方法在Oracle9i2+Hibernate 3.2.6上测试通过
我的异常网推荐解决方案:oracle存储过程,http://www.myexception.cn/oracle-develop/177537.html