Недопустимая операция: результирующий набор закрыт. ERRORCODE=-4470, SQLSTATE=null


Я извлекаю определенные данные из таблицы с помощью ключа. Я использую запрос hibernate для извлечения данных.

Я могу получить данные для конкретного ключа . Но для некоторых других ключей я получаю ошибки или исключения. исключение, которое я получаю, - это

[1/17/13 14:07:41:819 IST] 0000004c LongType      I **org.hibernate.type.NullableType nullSafeGet could not read column value from result set: BRAND1_23_2_; [jcc][t4][10120][10898][3.58.81] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null**
[1/17/13 14:07:41:822 IST] 0000004c JDBCException W org.hibernate.util.JDBCExceptionReporter logExceptions SQL Error: -4470, SQLState: null
[1/17/13 14:07:41:823 IST] 0000004c JDBCException E org.hibernate.util.JDBCExceptionReporter logExceptions [jcc][t4][10120][10898][3.58.81] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null
[1/17/13 14:07:41:826 IST] 0000004c DefaultLoadEv I org.hibernate.event.def.DefaultLoadEventListener onLoad Error performing load command
                                 org.hibernate.exception.GenericJDBCException: could not load an entity: [com.travelport.soa.gds.airline.brandedfares.entity.FareCollection#490]
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
5 2

5 ответов:

Вы выбрали объект, который имеет отношение "один ко многим", представленное в Java как lazy-loaded Collection, и пытаетесь выполнить итерацию над этой коллекцией после того, как вы уже закрыли сеанс гибернации, в котором вы выбрали объект. Вы должны либо охотно получить коллекцию, либо расширить границы сеанса, чтобы включить в него свой итерационный код.

При использовании kodo set resultSetHoldability to 1 в источнике данных пользовательское СВОЙСТВО

Существует много основных причин для кода SQL -4470 в DB2. Вот краткий список:

  1. ошибка программы (как и в этом случае), закрывание курсора до того, как он будет был полностью прочитан.
  2. ошибка в установленном драйвере JDBC: https://issues.jboss.org/browse/JBPAPP-2408
  3. Неправильное использование драйвера из-за неправильной документации: http://www-01.ibm.com/support/docview.wss?uid=swg1IV45140
  4. ошибка в DB2 сервер: https://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.5.0/com.ibm.db2.luw.admin.trb.doc/doc/c0020806.html

Если стратегия ленивого / нетерпеливого извлечения является проблемой, вы можете использовать @OneToMany(fetch=FetchType.EAGER) и, возможно, прочитать Hibernate от одного до многих нетерпеливых, не вытаскивая все данные, Как получить @OneToMany и @ ManyToMany сущности и краткое руководство по выборке стратегий.

Я бы рекомендовал опубликовать несколько фрагментов того, как вы получаете доступ к базе данных и затронутым записям. Возможно, вы захотите использовать https://gist.github.com/.

Причина, по которой я получил ту же ошибку, заключалась в том, что я закрыл соединение db2, а затем попытался прочитать результирующий набор. Пожалуйста, подчеркните, что db2 должен оставаться подключенным во время чтения результирующего набора.