Hibernate JPA, Spring MVC и LazyInitializationException - PullRequest
0 голосов
/ 24 июля 2010

При попытке получить предметы из БД я получил эту ошибку:

13:00:13.876 [7838526@qtp-204712603-0] ERROR o.h.LazyInitializationException - failed to lazily initialize a collection of role: bo.myobj, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: de.myob.linkedstuff, no session or session was closed

Я понимаю, что решение этой проблемы решается переключением на готовую, а не ленивую загрузку, например

@OneToMany(mappedBy = "myobj", cascade = CascadeType.ALL, fetch=FetchType.EAGER)

и я также понимаю, что энергичная загрузка не рекомендуется. Как лучше всего справиться с этой проблемой?

Ответы [ 3 ]

5 голосов
/ 24 июля 2010

Я почти уверен, что это происходит, когда нет активной транзакции.

Прочтите справочную часть о Управление декларативными транзакциями

Обычно это сводится к вашему методу обслуживания или классу, нуждающемуся в аннотации @Transactional, если вы используете аннотации или иным образом правильную конфигурацию XML <tx:advice>.

3 голосов
/ 24 июля 2010

Это распространенная проблема, обычно возникающая при рендеринге представления после закрытия спящего режима Session. Распространенным решением является использование шаблона Open Session In View , который сохранит сеанс гибернации открытым в течение всего времени веб-запроса.

Spring поставляется с фильтром , который реализует этот шаблон. Например, чтобы включить его для всех файлов JSP в вашем приложении, добавьте что-то подобное в ваш web.xml:

<filter>
    <filter-name>osivFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>osivFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>
2 голосов
/ 24 июля 2010

Лучшее разделение между постоянством и другими слоями. Убедитесь, что объекты, создаваемые постоянным слоем, не содержат ссылок на Hibernate.

Статья Hibernate, Get Out of My POJO! может быть полезным.

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