休眠存储过程 - 不知道是否支持REF_CURSOR参数



你好,我工作Oracle存储过程,我有过程名称Test和2个参数 ->x 输入VARCHAR2,输出 ->REF_CURSOR 输入SYS_REFCURSOR。 我正在尝试使用休眠调用此过程,但我有例外

线程"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();

最新更新