首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring web服务中的Hibernate会话处理

spring web服务中的Hibernate会话处理
EN

Stack Overflow用户
提问于 2009-01-21 22:24:56
回答 2查看 6.3K关注 0票数 1

我将spring-ws与Jaxb2Marshaller、PayloadRootAnnotationMethodEndpointMapping和GenericMarshallingMethodEndpointAdapter结合使用,通过@Endpoint和@PayloadRoot注解来配置我的web服务。

当我尝试使用我的项目的DAO时,我能够从数据库加载对象,但是一旦我试图访问我的服务中应该延迟加载的属性,我就会得到一个org.hibernate.LazyInitializationException -DAO‘t initialize proxy - no Session。

在我的spring-mvc应用程序中,OpenSessionInViewInterceptor处理会话。如何配置我的web服务项目,以便为每个web服务调用自动创建Hibernate会话?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-01-27 09:21:57

与此同时,我找到了一个解决方案。这篇论坛文章给了我一个提示:

http://forum.springframework.org/showthread.php?t=50284

基本上,我将@Transactional注释添加到我的web服务实现类中。棘手的部分是告诉spring使用原始类(而不是tx:annotation-driven创建的代理),这是我使用以下配置实现的:

代码语言:javascript
复制
<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" />

配置语句的顺序似乎也很重要。

票数 0
EN

Stack Overflow用户

发布于 2009-01-21 22:41:20

在需要hibernate会话存在的spring上下文中的对象周围包装一个org.springframework.aop.framework.ProxyFactoryBean。

这篇文章http://springtips.blogspot.com/2007/06/spring-and-hibernate.html展示了如何做到这一点。

如果在以这种方式使用会话时,由于延迟加载集合而遇到问题,至少有两种可能的修复方法:

  • 在可用Hibernate会话执行的代码中添加一个Hibernate.initialize()调用到集合中-通过将lazy="false“添加到映射中来对非惰性集合进行http://www.hibernate.org/hib_docs/v3/api/org/hibernate/Hibernate.html#initialize(java.lang.Object)
  • Use -当心使用此选项时,您可以很容易地强制hibernate使用两个放置不当的lazy="false”选项加载整个数据库。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/467290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档