无法使用 Hibernate 和 Oracle 11g 数据库读取 Spring Boot 应用程序中的第二个 Refcursor

     2023-02-26     21

关键词:

【中文标题】无法使用 Hibernate 和 Oracle 11g 数据库读取 Spring Boot 应用程序中的第二个 Refcursor【英文标题】:Unable to Read 2nd Refcursor in a Spring Boot application with Hibernate and Oracle 11g Database 【发布时间】:2020-06-17 18:14:28 【问题描述】:

问题详情

我们正在开发一个 Spring Boot 应用程序,其中我们使用 Oracle 11g DB 的 @NamedStoredProcedureQuery 连接到 Stored Procs(所有返回多个 refcursor)。我们无法同时从第二个游标读取数据。一旦我们为第二个 refcursor 提供了第二个结果类,我们就会得到一个名为 Invalid Column Name 的异常。读取 1 个光标工作正常。

异常详情

javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: 
Error extracting results from CallableStatement Caused by: 
java.sql.SQLException: Invalid column name

实现细节

存储过程查询
@NamedStoredProcedureQuery (
   name = "getSP1Data",
   procedureName = "package_name",
   resultClasses = Cursor1Response.class, Cursor2Response.class,
   parameters = 
      @StoredProcedureParameter(type = Integer.class, mode = ParameterMode.IN, name = "in_param_1"),
      @StoredProcedureParameter(type = void.class, mode = ParameterMode.REF_CURSOR, name = "cursor_1"),
      @StoredProcedureParameter(type = void.class, mode = ParameterMode.REF_CURSOR, name = "curosr_2"),
      @StoredProcedureParameter(type = String.class, mode = ParameterMode.INOUT, name = "in_out_param_2") 
)
光标响应类
@Entity
public class Cursor1Response 

    @Id 
    @Column(name = "column_name_1") 
    private Date column1;

    @Column(name = "column_name_2") 
    private Double column2; 


@Entity 
public class Cursor2Response 

    @Id 
    @Column(name = "column_name_1") 
    private Date column1;

    @Column(name = "column_name_2") 
    private Double column2; 

DAO 层实现(从我们实际调用存储过程查询的位置)
StoredProcedureQuery query = entityManager.createNamedStoredProcedureQuery("getSP1Data");

// Code for setting all in params
query.getResultList(); // While execution of this line it is 
throwing the above mentioned exception

有没有人处理过这种情况并且对如何解决这个异常有任何想法?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。首先,我尝试将 Oracle JDBC 驱动程序从 8 降级到 6,但没有任何结果。之后我用更编程的存储过程定义更改了注释(注意:避免使用位置参数,它们会导致同样的问题......):

EntityManager entityManager = Persistence.createEntityManagerFactory("namehere").createEntityManager();
StoredProcedureQuery spq = 
    entityManager.createStoredProcedureQuery("YOUR.SP.NAME")
        .registerStoredProcedureParameter("name1", String.class, ParameterMode.IN)   
        .registerStoredProcedureParameter("name2", Integer.class, ParameterMode.OUT)
        .registerStoredProcedureParameter("name3", String.class, ParameterMode.OUT)
        .registerStoredProcedureParameter("name4", void.class,ParameterMode.REF_CURSOR)
        .setParameter(SP_PARAM_MSISDN, "paramval");
spq.execute();

【讨论】:

无法使用 JPA 2.0、Spring 2.5.6、Hibernate 3.6.1 和 Maven 在 HSQLDB 中持久化

】无法使用JPA2.0、Spring2.5.6、Hibernate3.6.1和Maven在HSQLDB中持久化【英文标题】:CannotpersistinHSQLDBusingJPA2.0,Spring2.5.6,Hibernate3.6.1andMaven【发布时间】:2011-05-1619:43:38【问题描述】:我正在尝试使用Hibernate和JPA设置Spring,但是在尝试持... 查看详情

休眠/Oracle 序列不工作

】休眠/Oracle序列不工作【英文标题】:Hibernate/OracleSequencenotworking【发布时间】:2013-08-0613:16:12【问题描述】:我正在使用hibernate和oracleDB尝试使用序列将自动ID插入到表中。该序列明显存在于数据库中,但hibernate似乎无法找到它... 查看详情

java示例代码_使用hibernate和oracle函数映射实体

java示例代码_使用hibernate和oracle函数映射实体 查看详情

Hibernate 和 Oracle VARRAYS/嵌套表

】Hibernate和OracleVARRAYS/嵌套表【英文标题】:HibernateandOracleVARRAYS/NESTEDTABLE【发布时间】:2011-06-1009:34:54【问题描述】:Oracle支持使用VARRAYS和NESTEDTABLE数据类型,允许使用多值属性。(http://www.orafaq.com/wiki/NESTED_TABLE)我目前使用Hiberna... 查看详情

无法使用 Hibernate 和 Maven 运行 JPA2

】无法使用Hibernate和Maven运行JPA2【英文标题】:Can\'tgetJPA2runningwithHibernateandMaven【发布时间】:2011-02-1107:21:48【问题描述】:一整天都在尝试,并在网上搜索了****......徒劳无功。你是我最后的希望:这是我的代码:实体:packagesa... 查看详情

如何使用 Hibernate 按投影分组

】如何使用Hibernate按投影分组【英文标题】:HowtogroupbyprojectionswithHibernate【发布时间】:2015-08-1319:05:25【问题描述】:我需要查找特定组中且位于特定地址的学生列表以及他们所在位置的电话号码。我的主要问题是我无法将每个... 查看详情

使用 Hibernate 和 Spring 创建 Blob

】使用Hibernate和Spring创建Blob【英文标题】:BlobcreationusingHibernateandSpring【发布时间】:2016-01-1312:09:03【问题描述】:我正在使用Spring4.2.3、Hibernate5.0.4、JPA2.1来进行ORM的自我训练。今天我正在学习如何在Oracle11.2.0.4DB中存储Blob。在... 查看详情

为啥无法显示hibernate的sql参数,哪里有误。我使用hibernate3.6.1版本和log4j1.2.16版本。

...ayout.ConversionPattern=[%-5p][%-dyyyy-MM-ddHH:mm:ss]%m%n#log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=tracelog4j.logger.org.hibernate.type=TRA 查看详情

使用 Spring JPA / Hibernate 进行条件插入

】使用SpringJPA/Hibernate进行条件插入【英文标题】:ConditionalinsertwithSpringJPA/Hibernate【发布时间】:2016-05-0608:52:28【问题描述】:我正在开发一个在集群环境中运行的项目,其中有许多节点和一个数据库。该项目使用Spring-data-JPA(1.9... 查看详情

使用 JPA 和 Hibernate 将 Java 布尔值映射到 Oracle Number 列

】使用JPA和Hibernate将Java布尔值映射到OracleNumber列【英文标题】:MappingJavabooleantoOracleNumbercolumnwithJPAandHibernate【发布时间】:2015-05-0601:50:40【问题描述】:我的模型中有一个这样创建的属性:publicclassClientprivateBooleanactive;我的RDBMS... 查看详情

无法确定“oracle”的方言

...09:17【问题描述】:我正在使用Springboot(2.3.5)、Oracle19cDB和Hibernate(5.4)。我尝试建立多数据源连接,但我不断收到方言错误Couldn\'tdetermineDialectfor"oracle"。 查看详情

spring和hibernate整合时无法自动建表

 在使用spring整合hibernate时候代码如下:<propertyname="dataSource"ref="dataSource"/><!--配置hibernate的属性--><propertyname="hibernateProperties"><props><propkey="hibernate.dialect"> 查看详情

java示例代码_如何使用Hibernate和Oracle 10g方言通过JPA生成我的id

java示例代码_如何使用Hibernate和Oracle 10g方言通过JPA生成我的id 查看详情

在java中主键生成策略(hibernate)都是指的是id的吗

在java中主键生成策略(hibernate)都是指的是id的吗主键生成策略是指<grneratorclass="native"/>1、native对于oracle采用Sequence方式,对于MySQL和SQLServer采用identity(自增主键生成机制),native就是将主键的生成工作交由数据库... 查看详情

hibernate缓存

一级缓存1.不同session,相同语句,会执行多次查询;相同session,相同语句,会执行一次查询形式:Employeeemp=session.get(Employee.class,1);  2.一级缓存,又称session缓存。其生命周期伴随着session的开始和结束3.一级缓存无法取消4.... 查看详情

如何使用 @ID 和 @GeneratedValue 从 Hibernate + JPA 中的序列中获取 Oracle 生成的值

】如何使用@ID和@GeneratedValue从Hibernate+JPA中的序列中获取Oracle生成的值【英文标题】:HowtoobtainOraclegeneratedvaluefromasequenceinHibernate+JPAwith@IDand@GeneratedValue【发布时间】:2015-04-2112:51:36【问题描述】:我有以下Oracle表定义。CREATETABLE"SI... 查看详情

hibernate和oracle通过windows身份验证连接

如何使用Windows身份验证连接到Oracle数据库?目前,我只使用Oracle用户名和密码,但是,要求用户在安装时选择Windows身份验证,因为我们提供与SQL相同的选项。答案您需要将SQLNET.ORA中的AUTHENTICATION_SERVICES条目修改为:SQLNET.AUTHENTIC... 查看详情

Hibernate和Spring数据jpa同时使用?

】Hibernate和Spring数据jpa同时使用?【英文标题】:SimultaneoususeofHibernateandSpringdatajpa?【发布时间】:2014-03-0711:03:56【问题描述】:是否可以同时使用SpringDataJPA(由Hibernate作为JPA提供者提供支持)和直接使用Hibernate?问题是当我使... 查看详情