Недопустимая операция: результирующий набор закрыт. 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 ответов:
Вы выбрали объект, который имеет отношение "один ко многим", представленное в Java как lazy-loaded
Collection
, и пытаетесь выполнить итерацию над этой коллекцией после того, как вы уже закрыли сеанс гибернации, в котором вы выбрали объект. Вы должны либо охотно получить коллекцию, либо расширить границы сеанса, чтобы включить в него свой итерационный код.
Существует много основных причин для кода SQL -4470 в DB2. Вот краткий список:
- ошибка программы (как и в этом случае), закрывание курсора до того, как он будет был полностью прочитан.
- ошибка в установленном драйвере JDBC: https://issues.jboss.org/browse/JBPAPP-2408
- Неправильное использование драйвера из-за неправильной документации: http://www-01.ibm.com/support/docview.wss?uid=swg1IV45140
- ошибка в 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/.