Hibernate无法注册REF_CURSOR参数

时间:2017-09-12 11:46:45

标签: jpa oracle11g hibernate-5.x

我是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编程。 。 。请帮忙。

2 个答案:

答案 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