исключение «не удалось лениво инициализировать коллекцию ролей» возникает даже при использовании шаблона OSIV - PullRequest
2 голосов
/ 14 марта 2012

Я использую OpenSessionInViewInterceptor , чтобы избежать LazyInitializationException.

Это работало нормально, но иногда возникает LazyInitializationException, даже если я использую OSIV.Исключения таковы:

SEVERE: Servlet.service() for servlet [appServlet] in context with path [] 
    threw exception [Request processing failed; nested exception is 
    org.apache.tiles.impl.CannotRenderException: ServletException including path 
    '/WEB-INF/views/home/master.jsp'.] with root cause org.hibernate.LazyInitializationException: 
    failed to lazily initialize a collection of role: com..., 
    no session or session was closed 
        at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersisten
tCollection.java:383)
        at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(Abs
tractPersistentCollection.java:375)
        at 

Более странно то, что журнал исключений находится только в файлах журналов, и для навигации по сайту нет проблем.

Как это происходит?

Ответы [ 2 ]

0 голосов
/ 21 мая 2012

В моем случае это было из-за кеширования объектов. Поскольку кэшированные объекты были отсоединены, LazyInitializationException произошло при доступе к некоторым свойствам, которые не были инициализированы позже.

0 голосов
/ 11 апреля 2012

Обычно это происходит, когда вы работаете с отсоединенным объектом.Вы должны повторно присоединить объект к сеансу, чтобы Hibernate мог работать с ним.

Использовать session.merge() или session.refresh()

Здесь у вас также есть несколько примеров: Что такоеправильный способ повторно прикрепить отдельные объекты в Hibernate?

...