Хранимая хранимая процедура - неизвестно, поддерживает ли параметры REF_CURSOR - PullRequest
0 голосов
/ 02 июля 2018

Здравствуйте, я работаю Oracle хранимая процедура, у меня есть имя процедуры Тест и 2 параметра в -> x IN VARCHAR2 , out -> REF_CURSOR выход SYS_REFCURSOR . я пытаюсь вызвать эту процедуру, используя Hibernate, но у меня есть исключение

Исключение в потоке "main" org.hibernate.QueryException: Dialect [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();

        }
    }

1 Ответ

0 голосов
/ 06 июля 2018
 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...