Вместо использования lazy="false"
для элемента класса лучше использовать его в коллекциях.То есть, например, всякий раз, когда вы выбираете объект User
, так как коллекция в UserSpaceRole
помечается как не ленивая, коллекция также будет извлечена.Элемент имеет некоторые нежелательные последствия.Как правило, когда коллекция не ленивая, как я уже говорил выше, вся коллекция извлекается с использованием join, select или subselect, в зависимости от вашей стратегии извлечения.Например, в стратегии выбора при извлечении User
из базы данных hibernate выдает два оператора выбора: один для самого пользователя и один для коллекции.Однако hibernate может выбрать прокси отдельных элементов внутри коллекции.
С lazy="false"
hibernate не может проксировать эти объекты и обычно прибегает к использованию одного запроса с объединением двух таблиц.Это не всегда может быть желательным.
Однако правильный подход - взглянуть на свою архитектуру и понять, почему возникла исключительная ситуация.Вы пытались получить доступ к свойству или коллекции из отсоединенного объекта (см. здесь ) после того, как вы уже закрыли сеанс.Я бы посмотрел на сервисный уровень и увидел, как я могу получить все необходимые данные перед закрытием сеанса и передачей объектов вызывающей стороне.