当前位置: 代码迷 >> JBoss >> hibernate 调用oracle存储过程 有关问题
  详细解决方案

hibernate 调用oracle存储过程 有关问题

热度:9229   发布时间:2013-02-26 00:00:00.0
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上测试通过
  相关解决方案