Hibernate5调用Oracle中存储过程

来源:互联网 发布:crf算法原理 编辑:程序博客网 时间:2024/06/05 07:33

hibernate4中session.connection()这个方法已经过时了,所以在网上搜索到的许多方法都不太适用。目前解决方法有两种

1 。 对于没有输出的存储过程

-- 创建不带输出的存储过程create or replace procedure proc_ins(v_no in number,v_name in varchar2)asbegin  insert into emp(empno,ename) values(v_no,v_name);end;

@Testpublic void fun3(){Session session = JDBCUtils.openSession();Transaction tr = session.beginTransaction();    SQLQuery query = session.createSQLQuery("{call proc_ins(?,?)}");    query.setLong(0, 1122l);    query.setString(1, "colin");    query.executeUpdate();    tr.commit();    session.close();}

2 。对于有输出的存储过程

create  or replace    procedure proc_emp_yearsal (v_no in number,v_yearSal out number)isbegin   select sal*12+ nvl(comm,0) into v_yearSal from emp where empno=v_no;end;

@Testpublic void fun2(){Session session = JDBCUtils.openSession();ProcedureCall pc = session.createStoredProcedureCall("proc_emp_yearsal");//存储过程的名称pc.registerParameter("v_no", Long.class, ParameterMode.IN).bindValue(7788l);//参数1:对应存储过程中的变量名1,参数2:类型,参数3:是in还是out,参数4:手动设置了一个查询参数pc.registerParameter("v_yearSal", Long.class, ParameterMode.OUT);String string = pc.getOutputs().getOutputParameterValue("v_yearSal").toString();System.out.println(string);}