Я использую spring -ws с Jaxb2Marshaller, PayloadRootAnnotationMethodEndpointMapping и GenericMarshallingMethodEndpointAdapter для настройки своих веб-сервисов с помощью аннотаций @Endpoint и @PayloadRoot.
Когда я пытаюсь использовать DAO своего проекта, я могу загружать объекты из базы данных, но как только я пытаюсь получить доступ к свойствам внутри моей службы, которые должны быть загружены лениво, я получаю исключение org.hibernate.LazyInitializationException - не удалось инициализировать прокси - нет сеанса.
В моем веб-приложении spring-mvc сеансы обрабатываются OpenSessionInViewInterceptor. Как мне настроить мой проект веб-службы для автоматического создания сеанса гибернации для каждого вызова веб-службы?





Оберните org.springframework.aop.framework.ProxyFactoryBean вокруг объекта в контексте Spring, который требует присутствия сеанса гибернации.
В статье http://springtips.blogspot.com/2007/06/spring-and-hibernate.html показано, как это сделать.
Если у вас возникли проблемы из-за ленивой загрузки коллекций при таком использовании сеансов, есть как минимум два возможных исправления:
К моему ответу добавлены 2 возможных исправления.
Тем временем я нашел решение. Эта запись на форуме подсказала мне:
http://forum.springframework.org/showthread.php?t=50284
В основном я добавил аннотации @Transactional в свой класс реализации веб-службы. Сложная часть заключалась в том, чтобы сообщить Spring использовать исходный класс (а не прокси, созданный tx: annotation-driven), чего я добился, используя следующую конфигурацию:
<bean class = "org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping" >
<property name = "order" value = "1" />
</bean>
<tx:annotation-driven mode = "proxy" order = "200" proxy-target-class = "true" />
Порядок конфигурационных операторов тоже кажется важным.
Я обнаружил, что DAO работает, но ленивая загрузка не работает ... подсказка в ссылке мне не помогает