代码之家  ›  专栏  ›  技术社区  ›  Thomas Einwaller

SpringWeb服务中的Hibernate会话处理

  •  0
  • Thomas Einwaller  · 技术社区  · 15 年前

    当我尝试使用项目的DAO时,我可以从数据库中加载对象,但当我尝试访问服务中应该延迟加载的属性时,我得到一个org.hibernate.LazyInitializationException-无法初始化代理-没有会话。

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

    2 回复  |  直到 15 年前
        1
  •  2
  •   Simon Groenewolt    15 年前

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

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

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

        2
  •  0
  •   Thomas Einwaller    15 年前

    与此同时,我找到了一个解决办法。这个论坛条目给了我一个提示:

    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" />
    

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