我使用hibernate3,没有使用JPA 我在oracle中有一个返回2 out参数的过程 为了测试,我使用此查询在oracle中执行此过程。
declare
req_type number;
req_seq number;
begin
insert_req(1111,req_type,req_seq);
dbms_output.put_line('req_type='||req_type);
dbms_output.put_line('req_seq='||req_seq);
end;
现在我想使用休眠方式调用此过程
我尝试使用此代码对本地查询进行尝试,但未成功:
public void insertReq(String numEmp) {
int req_type ;
int req_seq;
String sql = " insert_req(1111,:in1,:in2) ";
SQLQuery query = session.createSQLQuery(sql);
query.setParameter("in1", req_type);
query.setParameter("in2", req_seq);
List results = query.list();
System.out.println(req_type);
System.out.println(req_seq);
}
当我有一个函数时,可以使用以下代码作为示例使用休眠模式运行它:
public void insertOrder(String numEmp) {
String query = "call insert_order(" + numEmp + ",50)";
SQLQuery sqlQuery = this.getSession().createSQLQuery(query);
sqlQuery.executeUpdate();
}
但是问题是如何使用休眠模式调用带有2 out参数的过程。
答案 0 :(得分:0)
您必须使用CallableStatement和registerOutParameter。 您可以从休眠会话中获得连接并创建callablestatement。 休眠状态并不能提供解决此问题的机制(至少据我所知)。 我希望有帮助。
答案 1 :(得分:0)
尝试一下,让我知道。
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Session session = em.unwrap(Session.class);
session.doWork(new Work() {
@Override
public void execute(Connection con) throws SQLException {
// do something useful
try (CallableStatement stmt = con.prepareCall("{call my_sp()}")) {
stmt.execute();
}
}
});
em.close();
最诚挚的问候。