java - Hibernate 存储过程 - 未知支持 REF_CURSOR 参数

标签 java oracle hibernate stored-procedures jdbc

你好,我工作Oracle存储过程,我有过程名称Test和2个参数 -> x IN VARCHAR2,out -> REF_CURSOR in out SYS_REFCURSOR 。我试图使用 hibernate 调用此过程,但我有异常(exception)

线程“main”org.hibernate.QueryException中出现异常:方言 [org.hibernate.dialect.OracleDialect] 未知支持 REF_CURSOR 参数

import model.Apprisal;
    import oracle.jdbc.OracleTypes;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.procedure.ProcedureCall;
    import org.hibernate.procedure.ProcedureOutputs;
    import org.hibernate.result.Output;
    import org.hibernate.result.ResultSetOutput;

    import javax.persistence.EntityManager;
    import javax.persistence.ParameterMode;
    import javax.persistence.StoredProcedureQuery;
    import java.sql.CallableStatement;
    import java.sql.ResultSet;
    import java.sql.Types;
    import java.util.List;

    public class DBUtil {
        public static void main(String[] args) {

            // crt factiry
            SessionFactory factory = new Configuration()
                    .configure("hibernate.cfg.xml")
                    //.addAnnotatedClass(Apprisal.class)
                    .buildSessionFactory();

            // crt sesion
            Session session = factory.getCurrentSession();
            session.beginTransaction();



            ProcedureCall call =session.createStoredProcedureCall( "{CALL TEST(?,?) }");


            call.registerParameter(1, String.class, ParameterMode.IN).bindValue("12345");
            call.registerParameter(2, Class.class, ParameterMode.REF_CURSOR);




            Output output = call.getOutputs().getCurrent();

            System.out.println("done");
            factory.close();

        }
    }

最佳答案

 session.beginTransaction();
// Call stored procedure
 session.doWork(connection -> {
                String query;
                query = "{CALL TEST(?,?) }";

                String val = txt_uniquecode.getText();
                CallableStatement callableStatement = connection.prepareCall(query);
                callableStatement.setString(1, val);
                callableStatement.registerOutParameter(2, OracleTypes.CURSOR);
                callableStatement.executeUpdate();

                ResultSet rs = (ResultSet) callableStatement.getObject(2);

                while (rs.next()) {
                    System.out.println(rs.getString("NAME"));
                }

            });
  // end 
    session.getTransaction().commit();
    dbUtilSingleton.closeConnection();

关于java - Hibernate 存储过程 - 未知支持 REF_CURSOR 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51135067/

相关文章:

oracle - 错误 : ORA-01704: string literal too long

java - Estado HTTP 500 - 请求处理失败;嵌套异常是 org.hibernate.exception.SQLGrammarException : could not prepare statement

oracle - 从复合主键中删除一列

java - Oracle 是 Java 中 BINARY_INTEGER 类型的 NUMBER(5) 索引表吗?

java - Dao实现中如何进行以下操作?

java - 在 @CollectionElement hibernate 中使用 createCriteria

java - 重构时 Mockito 模拟对单元测试的影响

java - 在 Java 中实现 Iterable

java - 图的 HashMap 表示

java - 使用 GridBayLayout 时 JTextArea 高度只有 1 行