Я использую Spring-mvc и спящий сеанс-фабрику.Hibernate - невозможно инициализировать прокси-сервер - нет сеанса
@Controller
|
-> @Service (@Transactional)
|
-> @Repository
У меня есть 2 сущностей, User
и Address
.
У пользователя есть List<Address>
с FetchType=LAZY
.
Если я добавляю объект Address
через пользователя, в пределах @Controller
, я получаю исключение failed to lazily initialize a collection of role - could not initialize proxy - no Session
.
Но если я делаю это внутри служебного слоя, который обернут @Transactional
, работа работает красиво.
Я узнал про прокси-серверы hibernate, ... и т. Д.
Мой вопрос в том, почему @Controller
не может изменить объект сущности, который повторен с @Service
. Потому что @Controller
не имеет понятия, является ли это спящим прокси-сервером или чем-то еще. К @Controller
это просто объект. Итак, почему я получаю сообщение об ошибке, если я изменяю объект объекта внутри @Controller. Это происходит только с объектами, которые отмечены как FetchType=LAZY
.
Но есть ли связь между контроллером и дао? – user2172625
Нет, реализуя OpenSessionInViewFilter, вы фактически удаляете управление сеансом из своего кода, тем самым отделяя свои проблемы, которые хороши. Это фильтр сервлетов, который будет управлять сеансом спящего режима для вас, и вы можете писать код, не беспокоясь о сеансе спящего режима. – VGaur