gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:18 25 4
gpt4 key购买 nike

你好,我工作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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com