`
daweiangel
  • 浏览: 325744 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类

OpenSessionInView学习

阅读更多

要正确理解OpenSessionInView必须具备以下几个知识点:
1.
servlet的多线程模型。
2.
Filter的工作原理。
3.
ThreadLocal的使用。
4.
Hibernate的Session以及Connection的管理。
5.
Lazy Load
6.
Hibernate的FlushMode
7.
Spring的处理分两种:
      7.1 One session per request  
      7.2 One new session per operation(这里的operation是指一次业务操作,例如如果我们的一次请求调用了某个业务方法,而这个方法里面有两个与Session相关的操作,则每一个操作都会新开一个Session,但是使用结束以后并不关闭,而是注册到ThreadLocal的deffered close 的变量里面,等到open session in view filter执行完毕的最后进行一起close, 这样有个问题就是一个request可能会启动很多Session,而且这些session之间的一级缓存不能共享,另外Hibernate限制不能在一个session里面load一个po却在这个session没有关闭的情况下面在另外一个session里面save或者update,也就是说同一个 po实例同一时间只能跟一个session发生关联,这样导致的结果是如果在上面假设的两个业务方法中的第一个进行load,而在第二个中对load出来的进行修改,铁定会报错。)

   另外如果是One session per request  (官方说法是叫SingleSession Mode), 会看到在open session in view filter中进行了FlushMode.setMode(Never),也就是从来不进行flush, 想当然地就是只能进行read-only的操作。但是没有关系,回到HibernateTemplate的模板方法以及 SessionFactoryUtil的getSession方法,可以看到我们的业务方法发出的每个请求都会试图先取到一个session(取 session的策略与上面描述的有关),在取Session的过程中会判断当前的操作是不是配制成read-only的(同时也会注册 transaction sync manager,有spring和Jta两种),如果不是read-only并且当前的flush mode  是 never的话,会把flush mode改成auto,因此就可以进行读写操作了。


     spring的callback 使得所有的操作最后基本归由HibernateTemplate当中的excute方法进行处理,对session的管控也是在这里集中进行,如果我们自己控制session,有两种方法,一种是我们也写callback,让spring帮我们擦屁股,另外一种是直接调用 HibernateTemplate的getSession方法,但是需要我们对session的生命周期以及关闭作仔细的控制,具体的控制策略可以参考 spring地实现。
分享到:
评论

相关推荐

    SSH项目整合示例【OpenSessionInView】所用到的jar包

    SSH是Java Web开发中的一个流行框架组合,由Struts、Hibernate和Spring三个组件构成。这个框架集成提供了模型-...尽管如此,理解SSH的整合对于学习和理解Java Web开发的历史以及现代框架的设计思想仍然具有重要意义。

    关于OpenSessionInViewFilter的学习

    OpenSessionInViewFilter是Spring框架中一个非常重要的组件,主要用于解决数据访问层(DAO)与视图层(View)之间的事务管理问题。...然而,当我们在服务层关闭了Session后,到视图层进行数据填充时,可能会遇到已关闭...

    J2EE学习路线及重要知识点.pdf

    主要接口(尤其是Session),普通属性和关联关系映射,Native SQL,inverse lazy cascade,继承关系映射,HQL,性能优化(一级缓存,二级缓存,查询缓存),事务和并发控制(悲观锁,乐观锁),OpenSessionInView,...

    Hibernate学习笔记

    opensessioninview是另一种事务管理策略,它在Web应用中常用于管理事务。悲观锁和乐观锁是解决并发问题的两种策略,Hibernate也提供了相应的支持。 Hibernate与Java持久化API(JPA)的集成是通过annotation方式完成...

    JAVA自学之路 七路线图明细

    掌握实体属性映射,关联关系映射,Native SQL,inverse,lazy,cascade,继承关系映射,HQL,性能优化,一级缓存,二级缓存,查询缓存,事务管理,悲观锁和乐观锁,以及OpenSessionInView和CurrentSession。...

    Spring的学习笔记

    - **事务配置**:未配置事务可能导致openSessionInView模式下异常。 - **中文乱码**:需要配置字符编码以解决乱码问题。 **SSH整合的jar包** - **Struts2,Hibernate,Spring**:确保引入了所有必要的jar包,包括...

    java知识点汇总学习路线与笔记

    - **openSessionInView**:一种实现读取操作时的懒加载技术。 - **CurrentSession**:获取当前线程中的Session实例。 #### 十四、Spring - **Spring**:一个轻量级的Java开发框架,提供了依赖注入、面向切面编程等...

    SSH整合示例项目 hibernate5.2.3+struts2.5.2+spring4.3.3.zip

    SSH整合是Java Web开发中的一种经典技术栈,包括Spring、Struts和Hibernate三个核心框架。这个项目是一个基于最新版本SSH的示例应用,具体...开发者可以通过学习和实践这个项目,深入理解SSH整合的核心概念和实际运用。

    马士兵Spring学习笔记.docx

    #### 示例:OpenSessionInView Filter - **作用**:保持一个持久化上下文与HTTP请求的生命周期同步,以解决懒加载异常问题。 - **解决方案**:通过在Struts2配置文件中配置`OpenSessionInViewFilter`来实现。 ### ...

    java自学之路num1

    性能优化,一级缓存,二级缓存,查询缓存,事务管理(悲观锁、乐观锁),以及OpenSessionInView和CurrentSession策略。 9. **Spring**:IoC(控制反转)和DI(依赖注入)的核心概念,Spring的架构,AOP(面向切面...

    SSH整合笔记

    - OpenSessionInView 交由 Spring 管理; - SessionFactory 也交由 Spring 管理; - 事务提交和回滚交给 Spring 处理; - 业务层 Bean 交由 Spring 管理; - 数据访问层 Bean 交由 Spring 管理。 - **具体步骤...

    SSH项目整合示例【源码】

    以上就是SSH项目整合示例的核心内容,通过这个示例,开发者可以学习到如何将Struts2、Spring和Hibernate三个框架高效地结合在一起,构建出完整的Web应用程序。理解并熟练掌握这些知识,将有助于提升在Java Web开发...

    Spring配置总结

    ### Spring配置总结:深入解析与应用 #### 一、Spring框架概述 Spring是一个开源的Java平台框架,由Rod Johnson创建...通过对这些内容的学习和实践,可以极大地提升开发者在构建基于Spring框架的应用时的能力和效率。

    spring面试题集

    当遇到OpenSessionInView问题时,可以使用OpenSessionInViewFilter或OpenSessionInViewInterceptor来解决。 Spring的事务管理提供了强大且灵活的机制,主要包括编程式和声明式两种方式: 1. 编程式事务管理:通过...

    spring学习笔记

    目录 1.1 Spring 框架学习路线:...........................................................................................................................4 1.2 Spring 框架的概述:...........................

    ssh配置总结

    ### SSH配置总结与部署步骤详解 #### 一、SSH框架简介 SSH框架是Java Web开发领域内非常流行的一种组合框架,分别由Struts2、Spring和Hibernate三个技术组成。...希望对正在学习或使用SSH框架的开发者有所帮助。

    hibernate面试题总结

    Hibernate是Java领域中一款流行的持久化框架,它简化了与关系数据库之间的交互,提供了一种对象关系映射(ORM)的解决方案。以下是对面试中可能会遇到的...理解并掌握这些内容对于深入学习和使用Hibernate至关重要。

    SSH面试总结(非常全)

    ### SSH面试总结(非常全) #### Java面试宝典与SSH常问问题详解 在IT行业中,尤其是对于专注于Java开发的专业人士来说,掌握SSH框架(即Struts、...希望这份“SSH面试总结”能成为你在学习和职业道路上的有力助手。

Global site tag (gtag.js) - Google Analytics