Невозможно прочитать 2-й рефкурсор в приложении Spring Boot с Hibernate и базой данных Oracle 11g - PullRequest
1 голос
/ 05 марта 2020

Сведения о проблеме

Мы работаем над приложением Spring Boot, в котором мы подключаемся к хранимым процессам (все возвращающие несколько прекурсоров), используя @NamedStoredProcedureQuery для Oracle 11g DB. Мы не можем прочитать данные со второго курсора одновременно. Как только мы предоставляем второй класс результата для второго рефкурсора, мы получаем исключение под названием 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 (ОТ ГДЕ МЫ НАСТОЯЩИМ НАЗЫВАЕМ НАШ ХРАНЕНОЙ PRO C QUERY)
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

Кто-нибудь работал над таким сценарием и есть идеи, как исправить это исключение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...