我无法在spring data jpa(版本1.11.16)和oracle服务器中使用带有游标的存储过程。
存储库:
@Repository
public interface GeoRegionRepository extends CrudRepository<PocRegions, String> {
@Procedure(name = "PocRegions.getRegion", procedureName = "POC_PKG_GEO.PRO_RETURN_REGION")
List<PocRegions> getRegion(@Param("id_region") BigDecimal regionId);
}
实体上的注释:
@Entity
@Table(name = "POC_REGIONS")
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery( name = "PocRegions.getRegion", procedureName = "POC_PKG_GEO.PRO_RETURN_REGION",
resultClasses = PocRegions.class ,parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "id_region", type = BigDecimal.class),
@StoredProcedureParameter(mode = ParameterMode.REF_CURSOR, name = "o_cursor", type = Void.class)})
})
这是我调用时的java响应:
geoRegionRepo.getRegion(id)
↓
2018-12-11 13:07:26.047调试24164---[nio-9090-exec-2]org.hibernate。SQL:{调用POC_PKG_GEO.PRO_RETURN_REGION(?,)}Hibernate:{调用POC_PKG_GEO.PRO_RETURN_REGION(?,)}2018-12-11 13:07:27.410跟踪24164---[nio-9090-exec-2]o.h.type.descriptor.sql。BasicBinder:绑定参数[id_region]为[NUMERIC]-[1]2018-12-11 13:07:27.658警告24164-[nio-9090-exec-2]。m.m.a.ExceptionHandlerExceptionResolver:已解析[java.lang.UnsupportedOperationException:org.hibernate.Dialente.Oracle9iDialect不支持通过存储过程生成结果集]
我不确定是否可以在这个老版本的spring-data上使用光标。要使用spring-data-jpa并调用这个过程,我应该怎么做?
谢谢你
编辑1:
我把它添加到我的应用程序中。属性包含在以下行中:
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
并将其添加到pom中(不包括Hibernate冲突到spring-data-jpa依赖项的声明):
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-tools</artifactId>
<version>${hibernate.version}</version>
</dependency>
问题很可能不是spring数据的版本,而是Hibernate版本和/或配置。
仔细检查错误消息:
java.lang.UnsupportedOperationException:org.hibernate.dialect.Oracle9iDialect不支持通过存储过程的结果集
该错误指出Hibernate使用的Oracle9方言不支持从存储过程中读取数据。所以,问题的根源是Hibernate,而不是Spring数据。
如果您尝试使用错误消息进行快速搜索,您将得到这个有用的线程:
java.lang.UnsupportedOperationException:org.hibernate.dialect.Oracle10gDialect不支持通过存储过程的结果集
根据这篇文章,我可能需要将您的Hibernate版本升级到5.1和方言版本(oracle 9到10)。
我以前从未将Spring Data JPA与存储过程一起使用过,但我非常感谢这里的任何反馈/输入
希望大家都做得好! 需要存储过程方面的帮助。创建过程时出现以下错误。非常感谢您的帮助。 错误:#1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near'CREATE PROCEDURE regi_email(在电子邮件VARCHAR(255)中,counti OUT INT)的正确语法 开始 “在3号线 我的程序如下:
我试图使用spring data jpa和spring boot读取oracle存储过程中的refcursor,该存储过程运行成功,但对返回列表的引用始终为空。 我尝试使用Hibernate作为JPA提供程序和Eclipse链接,但没有成功,下面是oracle ddl和java代码 Oracle表(我用一些示例数据填充了该表) Oracle存储过程 RoleRepository.java 我用下一
场景:我有一个存储过程,它基于两个输入从表中获取数据:一个日期和一个字符串(这是一个列名)。第一个过程是从另一个过程调用的,该过程使用光标循环表中的行,并将每一行传递给第一个过程的字符串(要检查的列名)。我对第二个过程(即直接调用的过程)的输入是日期。 问题:当我单独调用它时,我的第一个过程运行良好。我的第二个过程是抛出一些我不知道如何修复的语法错误。 Obs:我已经在这里检查了关于这个主题的一些
问题内容: 我正在尝试从Java调用StoredProcedure,但是返回的结果始终为 false 。实际上,它必须返回100个记录。连接建立良好。 我有一个 存储过程 , 我的java程序: 当前输出: 问题-为什么是错误的?我期望结果集中有100条记录。有记录,并且在执行sql Developer的测试脚本时可见。 更新时间:08/08 我没有获取数据的原因不是代码问题,当我将一些值传递给第
我有一个接受CLOB输入和REFCURSOR输出的Oracle存储过程。我通过传递RowMapper的Spring SimpleJdbcCall调用SP来映射结果。 但是,由于结果集很大,我需要为客户端提供回调功能。我不太清楚如何使用Spring为SP调用添加回调-包括SimpleJdbcCall和不包括SimpleJdbcCall。 我的一个想法是传入一个RowCallbackHandler。这