首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring-data-jpa 1.11.16带游标的存储过程

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

Stack Overflow用户
提问于 2018-12-11 12:09:45
回答 1查看 3.1K关注 0票数 0

我无法在(1.11.16版)和oracle服务器中使用游标存储过程。

储存库:

代码语言:javascript
复制
@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);
}

实体上的注释:

代码语言:javascript
复制
@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响应:

代码语言:javascript
复制
geoRegionRepo.getRegion(id)

2018-12-11 13:07:26.047调试24164 - nio-9090-exec-2 org.hibernate.SQL:{call POC_PKG_GEO.PRO_RETURN_REGION(?)} Hibernate:{call 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为数值-1 2018-12-11 13:07:27.658警告24164 -- nio-9090-exec-2 .m.m.a.ExceptionHandlerExceptionResolver : java.lang.UnsupportedOperationException: org.hibernate.dialect.Oracle9iDialect不支持通过存储过程设置结果。

我不确定这个旧版本的spring是否可以使用游标。我该怎么做才能使用spring并调用这个过程呢?

谢谢

编辑1:

我在我的application.properties中添加了以下一行:

代码语言:javascript
复制
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect

并添加到pom (将hibernate冲突排除到spring jpa依赖项的解密):

代码语言:javascript
复制
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-tools</artifactId>
    <version>${hibernate.version}</version>
</dependency>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-11 12:50:58

最有可能的问题不是spring数据的版本,而是Hibernate版本和/或配置。

仔细检查错误消息:

java.lang.UnsupportedOperationException: org.hibernate.dialect.Oracle9iDialect不支持通过存储过程设置结果集

错误说Hibernate使用的Oracle9方言不支持从存储过程读取数据。因此,问题的根源是Hibernate,而不是Spring数据。

如果您尝试使用错误消息进行快速搜索,您将得到以下有用的线程:

java.lang.UnsupportedOperationException: org.hibernate.dialect.Oracle10gDialect does not support resultsets via stored procedures

根据这篇文章,我可能需要升级你的hibernate版本到5.1和方言版本(甲骨文9到10)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53723913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档