1.通过Hibernate API或者JDBC,API调用存储过程:
CallableStatement cal = sess.connection().prepareCall(
"{Call scott.selectdept(?,?)}");
cal.setString(1, 10 + "");
cal.registerOutParameter(2, OracleTypes.CURSOR);
cal.executeQuery();
ResultSet rs = (ResultSet) cal.getObject(2);
while (rs.next()) {
System.out.println(rs.getString(1) + " " + rs.getString(2));
}
调用函数(不是SQL语句):
CallableStatement cal=con.prepareCall("{call ?:=get_sal(?)}");//函数
cal.registerOutParameter(1, Types.DOUBLE);
cal.setString(2, "7369");
cal.executeQuery();
String ss=cal.getString(1);
System.out.println(ss);
2.直接使用 Hibernate createQuerySql调用函数:
Session sess=fac.getCurrentSession();
Transaction tran = sess.beginTransaction();
SQLQuery squery = sess
.createSQLQuery("select get_sal(?) from scott.emp");
squery.setParameter(0, "7369");
List list = squery.list();
tran.commit();
3.通过XML传统的映射方式去调用:
<sql-query name="funtest" callable="true">
<return alias="emp" class="org.han.entity.Emp">
<return-property name="empno" column="empno"></return-property>
<return-property name="ename" column="ename"></return-property>
<return-property name="job" column="job"></return-property>
<return-property name="mgr" column="mgr"></return-property>
<return-property name="hiredate" column="hiredate"></return-property>
<return-property name="sal" column="sal"></return-property>
<return-property name="comm" column="comm"></return-property>
<return-property name="dept" column="deptno"></return-property>
<return-property name="version" column="version"></return-property>
</return>
{?=call getemp.getempc(?)}
</sql-query>
调用:
List<Emp> emps=session.getNamedQuery("funtest").setInteger(0, 10).list();
for (Emp emp : emps) {
System.out.println(emp);
}
4.hibernate注册自定义函数: