从休眠中调用具有多个引用光标的存储过程



我正在尝试从存储过程中检索值。此存储过程有两个 ref 游标。以下是 SP:

create or replace PROCEDURE "EMP_JOB" (
p_job           VARCHAR2,
p_emp_refcur    IN OUT SYS_REFCURSOR,
p_sal_refcur    IN OUT SYS_REFCURSOR
)
IS
BEGIN
OPEN p_emp_refcur FOR 
SELECT empno, ename 
FROM emp 
WHERE job = p_job;
OPEN p_sal_refcur FOR 
SELECT sal 
FROM emp 
WHERE job = p_job;
END;

这是我的java代码:

StoredProcedureQuery query = entityManager.createStoredProcedureQuery("EMP_JOB")
.registerStoredProcedureParameter(1, String.class, ParameterMode.IN)
.registerStoredProcedureParameter(2,  Class.class, ParameterMode.REF_CURSOR)
.registerStoredProcedureParameter(3,  Class.class, ParameterMode.REF_CURSOR)        
.setParameter(1, "CLERK");
query.execute();
Iterator queryIterator = query.getResultList().iterator();
ArrayList<Object> vinArray= new ArrayList<Object>();
while(queryIterator.hasNext()){
Object st= (Object)queryIterator.next();
vinArray.add(st);
}

我可以检索参数 2(p_emp_refcur IN OUT SYS_REFCURSOR( 的输出。

如何获取参数 3(p_sal_refcur IN OUT SYS_REFCURSOR( 的输出。

任何帮助将不胜感激。

提前致谢

似乎仍然不可能。但是,这是一种解决方法,方法是从休眠EntityManager获取连接,然后使用CallableStatement.

<小时 />
// Session = org.hibernate.Session
// entityManager = javax.persistence.EntityManager
Session session = entityManager.unwrap(Session.class);
session.doWork(new Work() {
@Override
public void execute(Connection con) throws SQLException {
// do something useful
try (CallableStatement cs = con.prepareCall("{CALL TEST_PACKAGE.GETCURSORS(?,?,?)}")) {
cs.setInt(1, 1);
cs.registerOutParameter(2, OracleTypes.CURSOR);
cs.registerOutParameter(3, OracleTypes.CURSOR);
cs.execute();
ResultSet rs = (ResultSet) cs.getObject(2);
ResultSet rs1 = (ResultSet) cs.getObject(3);
while (rs.next()) {
int a = rs.getInt(1);
System.out.println(a);
}
while (rs1.next()) {
int b = rs1.getInt(1);
System.out.println(b);
}
}
}
});

问题已经向Hibernate团队提出:

https://hibernate.atlassian.net/browse/HHH-12596

最新更新