LazyInitializationException весной - PullRequest
       8

LazyInitializationException весной

2 голосов
/ 29 апреля 2010

Я получаю исключение LazyInitializationException в приложении Spring. У меня настроен OpenEntityManagerInViewFilter, поэтому все мои отношения установлены как FetchType.LAZY, и все они работают. Проблема в том, что я пытаюсь получить доступ к пользователю, который находится в сеансе, через Spring Security и печатать информацию LAZY в JSP, что-то вроде этого:

<sec:authentication property="principal" var="userAuth"/>
${userAuth.organisation.id}

и я получаю

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

хотя я могу сделать $ {userAuth.username} без проблем

У меня есть пользовательский поставщик аутентификации, который является просто DAO, который загружает пользователей, используя Hibernate

 <sec:authentication-provider user-service-ref="userDAOImpl">

Странно то, что у меня возникает та же проблема, когда я устанавливаю для Object Object значение EAGER.

Проблема возникает, только когда я пытаюсь получить доступ через sec: authentication. Если я добавлю пользователя в модель, а затем получу доступ к данным в jsp, это сработает.

Почему я не могу получить доступ к данным, хранящимся в объекте, связанном с пользователем?

Спасибо

1 Ответ

6 голосов
/ 29 апреля 2010

Поскольку вы получили основную информацию при входе пользователя и сохранили ее в сеансе http в этот момент.

Если вы попытаетесь получить доступ к неинициализированной коллекции этого объекта при любом последующем HTTP-запросе, сеанс гибернации (где был выбран принципал) будет закрыт (сразу после входа в систему), и вы получите исключение LazyInitializationException

...