在Hibernate中也能夠經過SQLQuery對象調用數據庫的存儲過程,可是要求存儲過程必須返回一個結果集。 如在Oracle數據庫的一個存儲過程爲: CREATE OR REPLACE PROCEDURE selectGuestbookById (sp_ref OUT SYS_REFCURSOR,inputId IN guestbook.id%type)AS BEGIN OPEN sp_ref FOR select *from guestbook where id=inputId; END selectGuestbookById; 調用的過程以下: 要經過Hibernate調用selectGuestbookById存儲過程,還須要在Guestbook.hbm.xml文件中爲其命名 <sql-query name = 「com.kkoolerter.beans.Guestbook.getGuestbookBySP」 callable="true"> <return alias="Guestbook" class = "com.kkoolerter.beans.Guestbook" /> {call selectGuestbookById(?:inputId)} </sql-query> 標籤<sql-query>定義一個存儲過程,name屬性設置其名稱,callable="true"代表這是一個存儲過程<return>子標籤設置返回記錄封裝的對象類型,{call selectGuestbookById(/:inputId)}是調用存儲過程的代碼。 調用存儲過程的代碼以下: Query query = session.getNamedQuery(「com.kkoolerter.beans.Guestbook.getGuestbookBySP」); query.setInteger("inputId",1); Guestbook gb = (Guestbook)session.uniqueryResult();