В среде на основе транзакций DTO используются для отделения сущностей вашей базы данных от базового сеанса БД.
Эти сеансы обычно недоступны, и большинство сущностей состоят из прокси, которые лениво загружают коллекции членов. Таким образом, если вам нужно получить доступ к свойству коллекции в прокси-объекте, прокси-сервер загружает коллекцию в данный момент времени, независимо от того, существует транзакция базы данных или нет. Таким образом, доступ к элементу сущности может вызвать ошибку, когда нет активной транзакции.
Именно это происходит, когда вы перенаправляете свои сущности в представление, которое пытается получить доступ к члену. Поскольку обработка транзакций обычно определяется на уровне сервиса, в представлении / контроллере нет активной транзакции.
Чтобы обойти эту проблему, существуют разные подходы:
- Держите сессию открытой, например, через. механизм фильтра (OpenSessionInViewFilter от Spring), хотя, строго говоря, это анти-шаблон
- пусть ваши DAO возвращают объекты передачи данных, заполненные необходимыми членами, уже инициализированными
надеюсь, это помогло.