【发布时间】:2019-05-12 10:19:24
【问题描述】:
我无法在 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 : {call POC_PKG_GEO.PRO_RETURN_REGION(?,?)} 休眠: {call POC_PKG_GEO.PRO_RETURN_REGION(?,?)} 2018-12-11 13:07:27.410 TRACE 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.dialect.Oracle9iDialect 不支持结果集 存储过程]
我不确定是否可以在这个旧版本的 spring-data 中使用 cursor。我该怎么做才能使用 spring-data-jpa 并调用该程序?
谢谢
编辑 1:
我在我的 application.properties 中添加了以下行:
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
并将其添加到 pom 中(不包括休眠冲突到 spring-data-jpa 依赖声明):
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-tools</artifactId>
<version>${hibernate.version}</version>
</dependency>
【问题讨论】:
标签: java sql-server spring-data-jpa cursor