hibernate3.2中如何调用存储过程
来源:互联网 发布:软件开发如何报价 编辑:程序博客网 时间:2024/06/01 08:59
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;
在 Hibernate 里要要使用这个查询,你需要通过命名查询来映射它。
<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>
注意存储过程当前仅仅返回标量和实体现在。不支持 <return-join> 和 <load-collection>。
使用存储过程的规则和限制:
为了在 Hibernate 中使用存储过程,你必须遵循一些规则。不遵循这些规则的存储过程将不可用。如果你仍然想使用他们,你必须通过 session.connection() 来执行他们。这些规则针对于不同的数据库。因为数据库提供商有各种不同的存储过程语法和语义。
对存储过程进行的查询无法使用 setFirstResult()/setMaxResults() 进行分页。
建议采用的调用方式是标准 SQL92: { ? = call functionName(<parameters>) } 或者{ ? = call procedureName(<parameters>) }。原生调用语法不被支持。
对于 Oracle 有如下规则:
函数必须返回一个结果集。存储过程的第一个参数必须是 OUT,它返回一个结果集。这是通过 Oracle 9 或 10 的SYS_REFCURSOR 类型来完成的。在 Oracle 中你需要定义一个 REF CURSOR 类型,参见 Oracle 的手册。
对于 Sybase 或者 MS SQL server 有如下规则:
存储过程必须返回一个结果集。注意这些 servers 可能返回多个结果集以及更新的数目。Hibernate 将取出第一条结果集作为它的返回值,其他将被丢弃。
如果你能够在存储过程里设定 SET NOCOUNT ON,这可能会效率更高,但这不是必需的。
- hibernate3.2中如何调用存储过程
- Hibernate3调用存储过程用法
- Hibernate3调用存储过程用法
- Hibernate3调用存储过程用法
- Hibernate3调用存储过程用法
- Hibernate3.x调用存储过程
- Hibernate3.x调用存储过程
- Hibernate3调用存储过程用法
- Hibernate3.x调用存储过程
- Hibernate3调用存储过程用法
- Hibernate3.x调用存储过程
- Hibernate3.x调用存储过程
- Hibernate3.x调用存储过程
- Hibernate3.x调用存储过程
- Hibernate3.x调用存储过程
- Hibernate3.x调用存储过程
- hibernate3 调用oracle存储过程的方法
- Hibernate3.x调用存储过程【转】
- Makefile 学习(1):Introduction
- open和fopen的区别
- #define用法总结
- perl package声明
- C/C++ 宏带来的奇技淫巧
- hibernate3.2中如何调用存储过程
- LINUX平台设备(linux platform_device and platform_driver)
- 日期控件My97DatePicker用法
- 各种常用头文件的作用(转载整理)
- platform_device和platform_driver 流程简介
- SVN版本库无损迁移与自动备份(二)
- 2410 RTC 驱动解读
- LINUX core dump详解
- List和ArrayList的区别