Hibernate 从hbm调用存储过程
我一直在调用存储在oracle中的过程,并从Hibernate客户端返回选定的列 employee3.hbm.xmlHibernate 从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"
<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();