spring数据库会议

我是Spring的新手,我想进一步了解会话。我已经用Hibernate注释的实体映射了一个旧数据库,并构建了几个服务对象以进行获取,检索等。我的实体还包含其他实体(通过外键映射)和实体集。当我遍历服务中的实体图时,我没有问题。我的服务被包装在TransactionProxyFactoryBean中,所以一切都应该很好。

因此,在我的View

Controller中,我从服务中请求了一堆实体。但是,当我在视图控制器中遍历实体图时(例如,显示用户所在州的国家名称,而州和国家都是延迟加载的实体),Hibernate会话已经关闭,并且我收到“

LazyInitializationException:无法初始化代理-没有会议”

我不希望我的服务热切地获取数据,这会占用大量RAM,因为我的图很深,甚至可以包含循环引用。我也不想明确地涉及将在服务中显示的部分,因为那意味着我将不得不一遍又一遍地复制/粘贴类似的服务。所以我想要的是让Hibernate会话在我处于视图控制器中时仍然打开,并且在关闭该视图之前不要关闭该会话。我该怎么做才能使其保持打开状态?

我的视图bean看起来像这样,有什么方法可以将我的TransactionProxyFactoryBean派生的bean注入其中?

  <bean name="/" class="example.SimpleViewController">

<property name="userService" ref="userService"/>

<property name="catalogService" ref="catalogService"/>

</bean>

回答:

我在没有Spring的情况下使用Hibernate,所以我不确定100%Spring必须具有处理Sessions的功能,但是我相信它同时具有内置的Filter和Interceptor。处理JPA之外的会话的最佳方法是编写一个过滤器,该过滤器在移交给服务器端的其他内容之前先打开会话,然后再关闭会话。我相信这就是Spring内置的东西所做的。

以上是 spring数据库会议 的全部内容, 来源链接: utcz.com/qa/400015.html

回到顶部