【问题标题】:Hibernate stored procedure - not known to support REF_CURSOR parametersHibernate 存储过程 - 不知道是否支持 REF_CURSOR 参数
【发布时间】:2018-12-10 14:47:30
【问题描述】:

你好,我工作 Oracle 存储过程,我有过程名称 Test 和 2 个参数 in -> x IN VARCHAR2,out -> REF_CURSOR in out SYS_REFCURSOR 。我正在尝试使用休眠调用此过程,但我有异常

线程“主”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();

        }
    }

【问题讨论】:

  • 存储过程还是存储过程
  • 存储过程

标签: java oracle hibernate stored-procedures jdbc


【解决方案1】:
 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 2020-07-03
    • 2019-10-31
    相关资源
    最近更新 更多