在Spring数据库的会话(Database-sessions in Spring)

2019-10-17 09:14发布

我是很新的春天,我想了解更多的有关会议。 我已经映射与Hibernate注明实体旧的数据库,并建立了几个服务对象的获取,检索等我的实体也包含其他实体(通过外键映射)和集实体。 当我穿越我的服务entitiy图,我没有问题。 我的服务被包裹在一个TransactionProxyFactoryBean的,所以都应该是不错的。

所以,在我的视图控制器我请了一堆从服务实体。 但是,当我穿越在我的视图控制器的实体图形(例如显示用户状态的国家的名字,与国有和国家被延迟加载的实体),Hibernate的Session已经关闭,我得到一个“LazyInitializationException中:无法初始化代理 - 没有会话”

我不希望我的服务,急切地获取数据,那将耗费办法不多RAM,因为我的图是深的,甚至可以有循环引用。 我也不想显式地去触摸,我会在服务来显示部分,因为这会意味着我必须复制/粘贴一遍又一遍写类似的服务。 所以,我要的是有Hibernate的Session仍然打开,当我在我的视图控制器,直到认为已送达未关闭会话。 我能做些什么来保持打开状态?

我的观点豆看起来是这样的,有什么办法,我可以注入我TransactionProxyFactoryBean的衍生豆成吗?

  <bean name="/" class="example.SimpleViewController">
    <property name="userService" ref="userService"/>
    <property name="catalogService" ref="catalogService"/>
  </bean>

干杯

Answer 1:

见我回答这个问题: 在使用JPA / Hibernate的春天,我该如何保持一个会话打开,以避免延迟初始化例外?

我使用Hibernate使用Spring,所以我不是100%肯定的功能Spring有应对会议,但我相信它既有一个内置的过滤器和拦截器。 处理JPA的会议外,最好的方法是编写移交到你的服务器端的东西休息之前打开的会话过滤器,然后事后关闭会话。 我相信这是东西做什么春天的内置。



Answer 2:

你仍然需要使用开会话的视图模式,以避免这方面的问题,无论你使用Spring; 虽然春天有一些工具,以帮助像Struts或者纯JSP一些框架实现的设计模式。



文章来源: Database-sessions in Spring