Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从具有多个引用游标的Hibernate调用存储过程_Java_Spring_Hibernate_Jpa_Stored Procedures - Fatal编程技术网

Java 从具有多个引用游标的Hibernate调用存储过程

Java 从具有多个引用游标的Hibernate调用存储过程,java,spring,hibernate,jpa,stored-procedures,Java,Spring,Hibernate,Jpa,Stored Procedures,我正在尝试从存储过程中检索值。此存储过程有两个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

我正在尝试从存储过程中检索值。此存储过程有两个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);
}
StoredProcedureQuery=entityManager.CreateStoreProcedureQuery(“EMP_作业”)
.registerStoredProcedureParameter(1,String.class,ParameterMode.IN)
.registerStoredProcedureParameter(2,Class.Class,ParameterMode.REF\u游标)
.registerStoredProcedureParameter(3,Class.Class,ParameterMode.REF\u游标)
.setParameter(1,“职员”);
query.execute();
迭代器queryIterator=query.getResultList().Iterator();
ArrayList vinArray=新的ArrayList();
while(queryIterator.hasNext()){
Object st=(Object)queryIterator.next();
添加(st);
}
我可以检索参数2的输出(
p\u emp\u refcur IN OUT SYS\u REFCURSOR

如何获取参数3的输出(
p\u sal\u refcur IN OUT SYS\u REFCURSOR

任何帮助都将不胜感激


提前感谢

已向Hibernate团队提出的问题:


看来这还是不可能的。但是,这里有一个解决方法,从Hibernate
EntityManager
获取连接,然后使用
CallableStatement


//Session=org.hibernate.Session
//entityManager=javax.persistence.entityManager
Session Session=entityManager.unwrap(Session.class);
会议.工作(新工作){
@凌驾
public void execute(连接con)引发SQLException{
//做些有用的事
try(CallableStatement cs=con.prepareCall(“{CALL TEST_PACKAGE.GETCURSORS(?,?)}”)){
cs.setInt(1,1);
registerOutParameter(2,OracleTypes.CURSOR);
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);
系统输出打印项次(a);
}
while(rs1.next()){
intb=rs1.getInt(1);
系统输出打印ln(b);
}
}
}
});

现在是2020年,这个问题仍然没有解决。最好不要使用Hibernate的JPA支持。