我是Hibernate的新手。使用带有JPA 2.1和ojdbc8.jar的 Oracle10gDialect 连接到Oracle 11g的5.2.10 FINAL版本
我尝试使用String输入参数访问一个简单的存储过程并输出一个Oracle SYS_REFCURSOR。
StoredProcedureQuery call = session.createStoredProcedureCall("sp_get_profile");
call.registerStoredProcedureParameter(1, String.class, ParameterMode.IN);
call.registerStoredProcedureParameter(2, Class.class, ParameterMode.REF_CURSOR);
call.execute();
访问函数
时发生异常ERROR SqlExceptionHelper Invalid column type: 2012
DatabaseException::error=[Error registering REF_CURSOR parameter [2]]
我尝试编写一个只与Oracle驱动程序连接的简单程序。如果我将Types.REF_CUSOR注册为CallableStatement的输出参数,我会遇到同样的错误。
cs.registerOutParameter(2, Types.REF_CURSOR);
通过更改为OracleTypes
可以解决问题cs.registerOutParameter(2, OracleTypes.CURSOR);
任何人都知道什么是错的?如果我无法获得存储过程访问成功,我需要回退使用传统的SQL编程。 。 。请帮忙。
答案 0 :(得分:0)
最后让它工作,我应该在实现之前先检查Oracle JDBC文档。
ojdbc8应该适用于带有Oracle12cDialect的Oracle 12c + JDK8 + JPA2.1。
对于Oracle 11g,需要使用ojdbc6.jar
答案 1 :(得分:0)
我通过调试OJDBC和Hibernate(从源代码构建修补的Hibernate CORE库(5.4.15-Final))解决了该问题。
我已经修补了方法ExtractedDatabaseMetaDataImpl.supportsRefCursors
,该方法始终返回 false 。