我将spring-ws与Jaxb2Marshaller、PayloadRootAnnotationMethodEndpointMapping和GenericMarshallingMethodEndpointAdapter结合使用,通过@Endpoint和@PayloadRoot注解来配置我的web服务。
当我尝试使用我的项目的DAO时,我能够从数据库加载对象,但是一旦我试图访问我的服务中应该延迟加载的属性,我就会得到一个org.hibernate.LazyInitializationException -DAO‘t initialize proxy - no Session。
在我的spring-mvc应用程序中,OpenSessionInViewInterceptor处理会话。如何配置我的web服务项目,以便为每个web服务调用自动创建Hibernate会话?
发布于 2009-01-27 09:21:57
与此同时,我找到了一个解决方案。这篇论坛文章给了我一个提示:
http://forum.springframework.org/showthread.php?t=50284
基本上,我将@Transactional注释添加到我的web服务实现类中。棘手的部分是告诉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" />配置语句的顺序似乎也很重要。
发布于 2009-01-21 22:41:20
在需要hibernate会话存在的spring上下文中的对象周围包装一个org.springframework.aop.framework.ProxyFactoryBean。
这篇文章http://springtips.blogspot.com/2007/06/spring-and-hibernate.html展示了如何做到这一点。
如果在以这种方式使用会话时,由于延迟加载集合而遇到问题,至少有两种可能的修复方法:
https://stackoverflow.com/questions/467290
复制相似问题