簡體   English   中英

休眠存儲過程-未知支持REF_CURSOR參數

[英]Hibernate stored procedure - not known to support REF_CURSOR parameters

您好,我是Oracle存儲過程,我有過程名稱Test和2個參數in- > x IN VARCHAR2out- > REF_CURSOR in 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();

        }
    }
 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM