配置文件:
<hibernate-mapping>
<class name="vo.SshPost" table="ssh_post" >
<!-- <cache usage="read-write"/>-->
<id name="postId" type="java.lang.String">
<column name="post_id" />
<generator class="native" />
</id>
<property name="postName" type="java.lang.String">
<column name="post_name" length="20" />
</property>
<property name="postNo" type="java.lang.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 VARCHAR2) 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 VARCHAR2) 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")
系统居然报错:
java.lang.ArrayStoreException
at java.lang.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