当前位置: 首页 > 知识库问答 >
问题:

spring-data-jpa 1.11.16带游标的存储过程

金健
2023-03-14

我无法在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>

共有1个答案

夏侯臻
2023-03-14

问题很可能不是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。这