[英]call a Stored Procedure from Hibernate having multiple ref cursor
我正在嘗試從存儲過程中檢索值。 這個存儲過程有兩個引用游標。 下面是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
)的p_sal_refcur IN OUT SYS_REFCURSOR
。
任何幫助,將不勝感激。
提前致謝
好像還是沒辦法。 但是,這是通過從 Hibernate 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 團隊提出的問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.