16.2.2. 使用存储过程来查询

Hibernate 3引入了对存储过程查询(stored procedure)和函数(function)的支持.以下的说明中,这二者一般都适用。 存储过程/函数必须返回一个结果集,作为Hibernate能够使用的第一个外部参数. 下面是一个Oracle9和更高版本的存储过程例子.

  1. CREATE OR REPLACE FUNCTION selectAllEmployments
  2. RETURN SYS_REFCURSOR
  3. AS
  4. st_cursor SYS_REFCURSOR;
  5. BEGIN
  6. OPEN st_cursor FOR
  7. SELECT EMPLOYEE, EMPLOYER,
  8. STARTDATE, ENDDATE,
  9. REGIONCODE, EID, VALUE, CURRENCY
  10. FROM EMPLOYMENT;
  11. RETURN st_cursor;
  12. END;

在Hibernate里要要使用这个查询,你需要通过命名查询来映射它.

  1. <sql-query name="selectAllEmployees_SP" callable="true">
  2. <return alias="emp" class="Employment">
  3. <return-property name="employee" column="EMPLOYEE"/>
  4. <return-property name="employer" column="EMPLOYER"/>
  5. <return-property name="startDate" column="STARTDATE"/>
  6. <return-property name="endDate" column="ENDDATE"/>
  7. <return-property name="regionCode" column="REGIONCODE"/>
  8. <return-property name="id" column="EID"/>
  9. <return-property name="salary">
  10. <return-column name="VALUE"/>
  11. <return-column name="CURRENCY"/>
  12. </return-property>
  13. </return>
  14. { ? = call selectAllEmployments() }
  15. </sql-query>

注意存储过程当前仅仅返回标量和实体.现在不支持&lt;return-join&gt;&lt;load-collection&gt;