下面是Oracle 9i的存储过程示例:
CREATE OR REPLACE FUNCTION selectAllEmployments
RETURN SYS_REFCURSOR
AS
st_cursor SYS_REFCURSOR;
BEGIN
OPEN st_cursor FOR
SELECT EMPLOYEE, EMPLOYER,
STARTDATE, ENDDATE,
REGIONCODE, EID, VALUE, CURRENCY
FROM EMPLOYMENT;
RETURN st_cursor;
END;
如果需要使用该存储过程,可以先将其定义成命名SQL查询,例如:
<!-- 定义命名SQL查询,name属性指定命名SQL查询名 -->
<sql-query name="selectAllEmployees_SP" callable="true">
<!-- 定义返回列与关联实体类属性之间的映射 -->
<return alias="emp" class="Employment">
<!-- 依次定义每列与实体类属性的对应 -->
<return-property name="employee" column="EMPLOYEE"/>
<return-property name="employer" column="EMPLOYER"/>
<return-property name="startDate" column="STARTDATE"/>
<return-property name="endDate" column="ENDDATE"/>
<return-property name="regionCode" column="REGIONCODE"/>
<return-property name="id" column="EID"/>
<!-- 将两列值映射到一个关联类的组件属性 -->
<return-property name="salary">
<!-- 映射列与组件属性之间的关联 -->
<return-column name="VALUE"/>
<return-column name="CURRENCY"/>
</return-property>
</return>
{ ? = call selectAllEmployments() }
</sql-query>
调用存储过程还有如下需要注意的地方:
● 因为存储过程本身完成了查询的全部操作,所以调用存储过程进行的查询无法使用setFirstResult()/setMaxResults()进行分页。
● 存储过程只能返回一个结果集,如果存储过程返回多个结果集,Hibernate将仅处理第一个结果集,其他将被丢弃。
● 如果在存储过程里设定SET NOCOUNT ON,将有更好的性能表现。当然也可以没有该设定。
分享到:
相关推荐
hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程
使用hibernate的query调用oracle的存储过程/function,包含例子,源码以及数据库文件
java调用hibernate存储过程详细介绍,各种配置方法,还有与jdbc调用存储过程二者之间的对比。
hibernate本对数据库的操作有些不完美,有必要的时候可以调用存储过程来补足。
hibernate调用存储过程的方法,里面有典型的例题,欢迎大家下载
在hibernate中调用oracle中的存储过程的详细代码。可以借鉴使用,帮助学习。
Hibernate --调用存储过程(全)
hibernate3调用存储过程的用法详细介绍。
很好的hibernate开发技术,使用hibernate调用存储过程!
hibernate环境搭建已经对应存储过程调用
hibernate调用存储过程.docx
在hibernate中使用存储过程,调用存储过程
hibernate调用存储过程知识.pdf
前几天一直在搞spring+hibernate执行存储过程的技术,在网上查了很多资料没有一个是完全的能执行的,代码简单但,几天时间比较辛苦,所以要分多了点。由于包都太大,所以删掉啦!
hibernate调用存储过程[参考].pdf
1、使用hibernate调用不带参数返回值的存储过程方法public Boolean doInHibernate(Session session) t