在Hibernate中也可以通过SQLQuery对象调用数据库的存储过程,但是要求存储过程必须返回一个结果集。
如在Oracle数据库的一个存储过程为:
CREATE OR REPLACE PROCEDURE selectBookById
(sp_ref OUT SYS_REFCURSOR,inputId IN book.id%type)AS
BEGIN
OPEN sp_ref FOR
select *from book where id=inputId;
END selectBookById;
调用的过程如下:
要通过Hibernate调用selectGuestbookById存储过程,还需要在book.hbm.xml文件中为其命名
<sql-query name = “nl.getbookBySP” callable="true">
<return alias="Guestbook" class = "nl.beans.Book" />
{call selectBookById(?:inputId)}
</sql-query>
标签<sql-query>定义一个存储过程,name属性设置其名称,callable="true"表明这是一个存储过程<return>子标签设置返回记录封装的对象类型,{call selectBookById(/:inputId)}是调用存储过程的代码。
调用存储过程的代码如下:
Query query = session.getNamedQuery(“nl.getBookBySP”);
query.setInteger("inputId",1);
Book gb = (Book)session.uniqueryResult();
如在Oracle数据库的一个存储过程为:
CREATE OR REPLACE PROCEDURE selectBookById
(sp_ref OUT SYS_REFCURSOR,inputId IN book.id%type)AS
BEGIN
OPEN sp_ref FOR
select *from book where id=inputId;
END selectBookById;
调用的过程如下:
要通过Hibernate调用selectGuestbookById存储过程,还需要在book.hbm.xml文件中为其命名
<sql-query name = “nl.getbookBySP” callable="true">
<return alias="Guestbook" class = "nl.beans.Book" />
{call selectBookById(?:inputId)}
</sql-query>
标签<sql-query>定义一个存储过程,name属性设置其名称,callable="true"表明这是一个存储过程<return>子标签设置返回记录封装的对象类型,{call selectBookById(/:inputId)}是调用存储过程的代码。
调用存储过程的代码如下:
Query query = session.getNamedQuery(“nl.getBookBySP”);
query.setInteger("inputId",1);
Book gb = (Book)session.uniqueryResult();
本文介绍如何使用Hibernate框架调用数据库存储过程,并提供了一个具体的Oracle存储过程示例及相应的Hibernate配置。
6081

被折叠的 条评论
为什么被折叠?



