Hibernate 从hbm调用存储过程

Hibernate 从hbm调用存储过程,hibernate,hql,Hibernate,Hql,我一直在调用存储在oracle中的过程,并从Hibernate客户端返回选定的列 employee3.hbm.xml <hibernate-mapping> <class name="Employee" table="employee3"> <id name="eid" column="eid"/> <property name="fname" column="first_name"

我一直在调用存储在oracle中的过程,并从Hibernate客户端返回选定的列

employee3.hbm.xml

        <hibernate-mapping>
          <class name="Employee" table="employee3">
            <id name="eid" column="eid"/>
      <property name="fname" column="first_name"/>
      <property name="lname" column="last_name"/>
      <property name="email" column="email"/>
   </class>


<sql-query name="test1" callable="true">
  <return  alias ="test1" class ="Employee">
    <return-property name="fname" column="first_name"/>
    <return-property name="lname" column="last_name"/>
</return>
  {?=call get_empdetails_assg(?,?)}
</sql-query>
</hibernate-mapping>
存储过程:

create or replace  procedure get_empdetails_assg(mycursor out sys_refcursor,cond in           varchar)

as 
begin
open mycursor for

select eb.first_name,eb.last_name from employee3 eb where eb.first_name like cond;

end;
我在尝试使用setString0,v%设置sql中的条件时出现输出错误

--------------q1 processing-----------                                          Exception in thread "main" java.lang.IllegalArgumentException: No positional parameters in query: test1                                                                 at org.hibernate.internal.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:442)     
请输入任何信息..我厌倦了尝试:

问候
Jay

您没有正确地传递参数,需要调用getNamedQuery,而不是createSQLQuery

试试这个

Query query = session.getNamedQuery("test1");
query.setParameter(1, "some_vlaue");
query.setParameter(2, "some_vlaue");
List result = query.list(); 

我改为getNamedQuerytest1;但是我该如何检索元素呢。当我调用select*from这样的语句时,它可以很好地迭代所有列表元素,但是如何检索在被调用过程中显示为out的列数据;返回xml类=Employee中指定的Employee类型的对象列表。因此,迭代列表,将对象强制转换为Employee,就是这样。当我使用q1.list时,抛出了以下异常——q1处理——线程主线程java.lang.ArrayStoreException中的异常位于java.lang.System.arraycopyNative方法中的异常位于java.util.ArrayList.ToArrayArrayRayList.java:390位于org.hibernate.internal.util.collections.ArrayHelper.ToTypeArrayArrayRayHelper.java:106位于org.hibernate.internal.AbstractQueryImpl.typeArrayAbstractQueryImpl.java:986在org.hibernate.internal.AbstractQueryImpl.getQueryParametersAbstractQueryImpl.java:994at org.hibernate.internal.SQLQueryImpl.getQueryParametersSQLQueryImpl.java:184at org.hibernate.internal编辑您的问题并提供完整的statck跟踪,阅读。它展示了许多使用存储过程的方法。
Query query = session.getNamedQuery("test1");
query.setParameter(1, "some_vlaue");
query.setParameter(2, "some_vlaue");
List result = query.list();