LazyInitializationException с аннотацией @Transactional в MessageConverter - PullRequest
2 голосов
/ 11 мая 2010

У меня есть REST-сервис, предоставляемый через Spring-MVC. У меня есть определенный метод, который правильно отображается и вызывается через HTTP-вызов. Приложение My Spring содержит HibernateTransactionManager, а транзакции настраиваются с помощью @Transactional -аннотаций. Я аннотировал метод следующим образом:

@Transactional(readOnly = true)
@Override
@RequestMapping(value = "/start", method = RequestMethod.GET)
@ResponseBody
public List<SomeObject> start(....)

Каждый раз, когда я вызываю HTTP-метод, я org.hibernate.LazyInitializationException из моего org.springframework.http.converter.json.MappingJacksonHttpMessageConverter, который связан с контекстом моего приложения. Действительна ли аннотация @Transactional для MessageConverter?

Ответы [ 2 ]

2 голосов
/ 11 мая 2010

Ваш класс конвертера явно читает поле, которое настроено для ленивого сбора в вашей конфигурации Hibernate.

Два возможных решения:

  • Разверните ваш транзакционный метод, включив в него метод конвертера.
  • Отредактируйте свою конфигурацию Hibernate, чтобы охотно получить поле, отвечающее за LazyInitializationException. (Это поле может, например, быть частью отношения между двумя таблицами в базе данных.)
2 голосов
/ 11 мая 2010

LazyInitializationException означает, что ваш спящий режим Session закрыт в тот момент, когда вы пытаетесь прочитать неинициализированные данные вашей сущности.

Вы можете исправить это:

  • либо продление времени жизни сеанса (с использованием OpenSessionInView
  • предварительно инициализируйте сущность в вашем методе обслуживания, используя Hibernate.initialize(entity)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...