Grails Hibernate Session Troubles - не удалось лениво инициализировать коллекцию - PullRequest
0 голосов
/ 22 января 2011

Ошибка:

Error 500: null
Servlet: 
URI: 
Exception Message: failed to lazily initialize a collection of role: Student.lockers, no session or session was closed 
Caused by: Error executing tag <g:render>: Error executing tag <g:link>: failed to lazily initialize a collection of role: com.itzik.User.carts, no session or session was closed at grails-app/views/shared/_navigation.gsp:18 at grails-app/views/layouts/home.gsp:26 

Итак, у меня есть ученик (со многими шкафчиками).Теперь, когда студент входит в систему, служба безопасности обрабатывает ввод их в сеанс.Затем мой главный контроллер проверяет, есть ли у них активный шкафчик.Если нет, то это создает их для них.Теперь по какой-то причине он задыхается от отношений Студент -> Локер.

1 Ответ

2 голосов
/ 22 января 2011

У вас есть несколько вариантов:

  • use fetch=FetchType.EAGER - если в коллекции вряд ли будет слишком много объектов, которые, в свою очередь, содержат другие коллекции, это самый простойопция - вы просто извлекаете их из базы данных вместе с их владельцем

  • и используете OpenSessionInView - для этого потребуется некоторое время на настройку, но в конечном итоге оно может понадобиться, даже еслине для этого конкретного случая.Я не могу сказать вам точно, как настроить OSIV в Grails.

  • используйте Hibernate.initialize(collection) до закрытия сеанса (и до совершения транзакции) - это вручную, изагрязняет код, поэтому менее предпочтителен

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