hibernate3 调用oracle存储过程的方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
配置文件:
<hibernate-mapping>
<class name="vo.SshPost" table="ssh_post" >
<!-- <cache usage="read-write"/>-->
<id name="postId" type="ng.String">
<column name="post_id" />
<generator class="native" />
</id>
<property name="postName" type="ng.String">
<column name="post_name" length="20" />
</property>
<property name="postNo" type="ng.String">
<column name="post_no" length="20" />
</property>
<filter name="myfilter" condition=":myfilterParam = post_name"/>
</class>
<sql-query callable="true" name="selectAllUsers">
<return class="vo.SshPost">
<return-property name="postId" column="POST_ID"/>
<return-property name="postName" column="POST_NAME"/>
<return-property name="postNo" column="POST_NO"/>
</return>
{ call P_TEST(?,:VPOSTNO) }
</sql-query>
</hibernate-mapping>
存储过程:
CREATE OR REPLACE PACKAGE TESTPACKAGE AS
TYPE Test_CURSOR IS REF CURSOR;
end TESTPACKAGE;
CREATE OR REPLACE PROCEDURE P_TEST(P_CURSOR OUT TESTPACKAGE.TEST_CURSOR,
VPOSTNO IN V ARCHAR2) IS
BEGIN
OPEN P_CURSOR FOR
SELECT * FROM SSH_POST WHERE POST_NO = VPOSTNO;
END P_TEST;
如果不用PACKAGE 则可以使用
CREATE OR REPLACE PROCEDURE P_TEST(P_CURSOR OUT SYS_REFCURSOR,
VPOSTNO IN V ARCHAR2) IS
程序调用:
Session session = sessionFactory.openSession();
Query query = session.getNamedQuery("selectAllUsers");
List list = query.setParameter("VPOSTNO", "99")
.list();
System.out.println(list.size());
但是有个很郁闷的问题就是:
当{ call P_TEST(?,:VPOSTNO) } 改为{ call P_TEST(?,?) } 时
程序使用query.setParameter(1, "99")
系统居然报错:
ng.ArrayStoreException
at ng.System.arraycopy(Native Method)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.toArray(Unknown Source)
at org.hibernate.util.ArrayHelper.toTypeArray(ArrayHelper.java:75)
at org.hibernate.impl.AbstractQueryImpl.typeArray(AbstractQueryImpl.java:831)
at org.hibernate.impl.AbstractQueryImpl.getQueryParameters(AbstractQueryImpl.java:839) at org.hibernate.impl.SQLQueryImpl.getQueryParameters(SQLQueryImpl.java:194)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
奇怪的hibernate。