OpenSessionInView设置

OpenSessionInViewFilter是Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Session,一直保持这个Session,直到这个请求结束,具体是通过一个Filter来实现的。

  由于Hibernate引入了Lazy Load特性,使得脱离Hibernate的Session周期的对象如果再想通过getter方法取到其关联对象的值,Hibernate会抛出一个LazyLoad的Exception。所以为了解决这个问题,Spring引入了这个Filter,使得Hibernate的Session的生命周期变长。

  有两种方式可以配置实现OpenSessionInView,分别是OpenSessionInViewInterceptor和OpenSessionInViewFilter,功能完全相同,只不过一个在web.xml配置,另一个在application.xml配置而已。我个人比较倾向配置在application.xml里,因为web.xml里配置的东西的太多的话容易发生冲突,虽然可以调整,但是毕竟多了个麻烦。

OpenSessionInViewInterceptor配置:

  <beans>

     <bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">

     <property name="sessionFactory">

         <ref bean="sessionFactory"/>

     </property>

  </bean>

  <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

     <property name="interceptors">

         <list>

             <ref bean="openSessionInViewInterceptor"/>

         </list>

     </property>

     <property name="mappings">

         ......

     </property>

  </bean>

  ......

  </beans>

OpenSessionInViewFilter配置: (此监听器应该在struts2的监听器前面)

  <web-app>

    ......

  <filter>

     <filter-name>hibernateFilter</filter-name>

     <filter-class>

          org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

     </filter-class>

     <init-param>

         <param-name>singleSession</param-name>

         <param-value>true</param-value>

     </init-param>

  </filter>

    ......

  <filter-mapping>

     <filter-name>hibernateFilter</filter-name>

     <url-pattern>*.do</url-pattern>

  </filter-mapping>

  ......

  </web-app>

OpenSessionInView设置

时间: 2025-01-10 21:32:40

OpenSessionInView设置的相关文章

[转]OpenSessionInView模式

OpenSessionInView模式解决的问题:   * hibernate事物边界问题 * 因session关闭导致hibernate延迟加载例外的问题 事物边界: 一个事物的完成应该是在业务层完成的,但是事物的创建却是在数据层来做,这样必定造成业务层和数据层耦合性增强. 延迟加载例外: 如你所知,延迟加载使用了动态代理机制,只有在真正使用这个对象的时候才会去访问数据库,但是如果在数据层进行了事物提交,session关闭,再去访问 数据就会导致延迟加载例外异常,所以我们必须加大session

[转]Java程序员从笨鸟到菜鸟之(八十三)细谈Spring(十二)OpenSessionInView详解及用法

首先我们来看一下什么是OpenSessionInView?    在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时session已关闭,所以就会出现异常. 比较典型的是在MVC模式中,我们在M层调用持久层获取数据时(持久层用的是load方法加载数据),当这一调用结束时,session随之关闭,而我们希望在V层使用这些数据,这时才会迫使load加载数据,我们就希望这时的session是open着得,这就是所谓

OpenSessionInview

OpenSessionInview Open Session In View模式的主要思想是:在用户的每一次请求过程始终保持一个Session对象打开着 实现步骤: 步骤一.创建一个Web项目,创建包cn.happy.util,创建HibernateUtil工具类 public class HibernateUtil{ private static final ThreadLocal sessionTL=new ThreadLocal(); private static Configuratio

OpenSessionInView vs Dynamic Routing DataSource

开发中有这样的业务场景:有25家法院,法院数据库结构都是一样的,需要遍历25家法院统计每家法院的指标信息.我们项目使用的是spring boot2,对于遍历25家法院执行同样的操作,考虑使用spring自带的AbstractRoutingDataSource来实现数据源的切换(有关AbstractRoutingRoutingDataSource实现多数据源切换网上有很多实例,后面我也自己总结一篇).大概的实现方式是预先定义好n个DataSource,放入一个map中,在运行中,使用一个线程安全的

linux下Nginx配置文件(nginx.conf)配置设置详解(windows用phpstudy集成)

linux备份nginx.conf文件举例: cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf-20171111(日期) 在进程列表里 面找master进程,它的编号就是主进程号. ps -ef | grep nginx 查看进程 cat /usr/local/nginx/nginx.pid 每次修改完nginx文件都要重新加载配置文件linux命令: /usr/local/nginx -t //验证配置文件是否合法 若ngin

win7设置固定IP重启后无法上网,ipconfig显示为自动配置IPV4 169.254的地址

近日安装原版Win7系统打完网卡驱动补丁后,给电脑设置了固定的IP地址后一切正常,但是电脑重启后发现上不了网了,右下角网络图标有个感叹号,打开网络和共享中心-->本地连接-->详细信息-->发现IPv4的地址与ipconfig /all得到的IP地址一致,均显示为:自动配置IPv4地址:169.254.123.188(首选) 但是查看本地连接-->属性里看到之前设置的固定IP地址是没有问题的, 所以想到了应该是电脑启用了自动配置IPv4功能,导致了固定IP无法分配给电脑, 尝试用命

【Windows10&nbsp;IoT开发系列】开发人员模式设置

原文:[Windows10 IoT开发系列]开发人员模式设置  声明:本文转自微软Windows 开发人员中心(https://msdn.microsoft.com/library/windows/apps/xaml/dn706236.aspx),在此基础上进行删减和修改. ​对于要用于开发.安装或测试应用的设备,不再需要开发人员许可证.你只需从设备的设置中为这些任务启用设备一次.(仅限于运行Windows 10系统的设备) 使用开发人员功能 ​使用 Microsoft Visual Stud

easyui-textbox 和 easyui-validatebox 设置值和获取值

表单作如下定义:该input使用easyui的"easyui-textbox" 1 <input id="addSnumber" style="width: 200px; height: 30px;" class="easyui-textbox" type="text" name="snumber" data-options="required:true, missing

Extjs 4.2 设置buttontext为中文

可以在Ext.QuickTips.init();后加入如下代码: Ext.MessageBox.buttonText = { ok : "确定", cancel : "取消", yes : "是", no : "否" }; Extjs 4.2 设置buttontext为中文,布布扣,bubuko.com