【发布时间】:2010-11-22 13:00:07
【问题描述】:
我对 Spring 很陌生,我想更多地了解会话。我已经用 Hibernate 注释实体映射了一个遗留数据库,并构建了几个服务对象来获取、检索等。我的实体还包含其他实体(通过外键映射)和实体集。当我在我的服务中遍历实体图时,我没有问题。我的服务被包装在一个 TransactionProxyFactoryBean 中,所以一切都应该很好。
因此,在我的视图控制器中,我从服务中请求了一堆实体。但是,当我在视图控制器中遍历实体图时(例如,显示用户所在州的国家/地区名称,州和国家/地区都是延迟加载的实体),Hibernate 会话已经关闭,我收到“LazyInitializationException:无法初始化代理 -没有会话”
我不希望我的服务急切地获取数据,这会消耗大量 RAM,因为我的图表很深,甚至可以有循环引用。我也不想明确涉及我将在服务中显示的部分,因为这意味着我必须一遍又一遍地复制/粘贴编写类似的服务。所以我想要的是当我在我的视图控制器中时让 Hibernate 会话仍然打开,并且在视图被提供之前不要关闭会话。我该怎么做才能让它保持打开状态?
我的视图 bean 看起来像这样,有什么方法可以将我的 TransactionProxyFactoryBean 派生的 bean 注入其中?
<bean name="/" class="example.SimpleViewController">
<property name="userService" ref="userService"/>
<property name="catalogService" ref="catalogService"/>
</bean>
干杯
尼克
【问题讨论】:
标签: hibernate spring session transactions spring-mvc