首先,我在此写下的是我的项目中设置OpenSessionInView无效的情况下的解决方式,网络上有很多关于OpenSessionInView无效的解决方法,大家在试过后还是没法解决问题的话,可以参考我的错误,看看是不是犯了一样的错误。
我的解决方法是把OpenSessionInView这个Filter设置在Struts的Filter之前(注:web.xml文件中)。
<!-- 这个OpenSessionInView必须配置在下面struts的filter的前面 -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
另外关于OpenSessionInView,在此做个个人总结,我认为它的作用不是保证在用户登录到退出整个session期的hibernate session共用(也就是共享一个session)。而是在一次Action请求中,一个action中调用的各个dao方法里利用spring的hibernateTemplate方法操作数据库是共享一个hibernate session的,如果不设置openSessionInView的话,一次dao方法的操作实际,就是打开一个session,完成一个事务,然后关闭session的流程,这个打开和关闭session的操作由spring帮我们实现了。此次dao方法获取到的对象,无法再延迟加载相关别的数据了,因为session已经关闭了,这个对象已经不是持久化的了。本次action请求完成,hibernate session还是要关闭的。下次action请求,hibernate session还是做本action中的共享。不知道大家能理解我的意思不?
分享到:
相关推荐
### Spring + Hibernate OpenSessionInView 模式的理解和应用 在Java Web开发中,Spring与Hibernate作为两个重要的框架,经常被一起使用来实现业务逻辑与数据持久化的处理。而在使用这两个框架时,为了更好地管理...
为了练手培训,给大家准备的 Open Session In View 的简单例子,纯代码,大家可以参考,其中主要说了六部分内容: 1.通过接口编程 2.通过spring注入dao到 action 3.通过 open session in view filter 支持 延迟加载...
在Java Web开发中,OpenSessionInView(OSIV)模式是一种常见的解决数据持久化问题的设计模式,主要用于Spring框架与Hibernate等ORM工具的集成。这个模式的主要目的是解决在HTTP请求处理过程中,由于Session范围内的...
在使用`Open Session In View`时,可能会遇到一些问题,其中最常见的是以下错误: ```java org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode ...
同时,需要注意的是,OpenSessionInView模式虽然方便,但也会带来潜在的问题,如事务边界不清晰和会话泄漏。因此,在实际应用中,应结合具体需求谨慎使用,并考虑使用更现代的解决方案,如Spring Data JPA的...
在实际应用中,需要注意的是,`OpenSessionInViewFilter`虽然解决了懒加载的问题,但同时也可能导致会话过长,增加内存占用和并发控制的复杂性。因此,合理地配置和使用这个过滤器是非常重要的。 最后,文件名列表...
3. **Spring框架**:spring-context.jar、spring-webmvc.jar、spring-tx.jar等,还有可能需要spring-orm.jar、spring-aop.jar。 4. **其他依赖**:commons-logging.jar、log4j.jar等日志处理库,以及servlet-api.jar...
`数据库.txt` 可能包含了关于数据库设计、SQL查询优化或其他数据库管理方面的内容,而 `osiv` 文件则可能详细阐述了OSIV的工作原理或如何在项目中配置和使用。 总结来说,`lazy="true"` 是一种有效的性能优化策略,...
然而,当我们在服务层关闭了Session后,到视图层进行数据填充时,可能会遇到已关闭的Session导致的数据不可用问题。OpenSessionInViewFilter就是为了缓解这一问题而设计的。 该过滤器的核心思想是在用户的HTTP请求...
和Spring中OpenSessionInView由于org.springframework.web.struts.ContextLoaderPlugIn中保存同一个对象的名不同导致openSessionInView失效 稍微修改后在struts-config.xml中使用MyContextLoaderPlugIn.jar包中...
这样,整个请求生命周期内,数据库操作都可以在一个Session内完成,避免了可能出现的 LazyInitializationException。 在本项目中,SSH整合实现了OpenSessionInView,优化了数据访问性能,并保证了事务的一致性。...
在互联网行业中,数据库管理是关键的一环,尤其是在大型系统中,常常需要处理多个...在实际应用中,还需要根据业务需求,配置事务管理器、制定读写策略,并且可能需要处理如分库分表、数据库连接池等更复杂的场景。
在整合JSF、Spring和Hibernate时,通常会使用Spring的OpenSessionInView模式来处理数据库会话。这能确保在HTTP请求的整个生命周期内保持有效的Hibernate Session,从而避免可能出现的数据访问问题。 至于压缩包中的...
文档讨论了HibernateSession的使用,提到了Session-per-Transaction(每个事务一个会话)和OpenSessionInView(在视图中打开会话)两种模式。前者更强调事务的一致性,后者则提高了懒加载性能,但可能会导致脏读问题...
在Web开发中,OpenSessionInView模式能有效解决这个问题,但也要注意避免长时间占用Session资源。 其次,【抓取粒度】的调整也是关键。粒度决定了导航关联关系时预加载的数据量。通过设置batch-size,可以控制一次...
`openSessionInView`模式在Web层设置过滤器,保持Session在一次HTTP请求的整个生命周期内都开启,确保延迟加载能在Session范围内完成。 8. Spring支持两种事务管理方式:声明式事务(基于注解或XML配置)和编程式...
- OpenSessionInView模式在Web请求处理过程中保持Hibernate Session打开,直到视图渲染完成,确保数据的一致性。但也可能导致长时间持有数据库连接,增加内存占用。合理控制Session的生命周期对性能至关重要。 10....
因为同一个 Action 实例可能会被多个线程共享,导致并发访问时出现问题。 - **解决方案**: - 声明局部变量,避免在 Action 类中使用实例变量。 - 扩展 RequestProcessor,使得每次请求都会创建一个新的 Action ...
以下是对面试中可能会遇到的Hibernate相关知识点的详细解释: 1. **load和get的区别**: - `load`方法是基于对象标识符(OID)来获取对象,它返回的是一个代理对象,实际的对象数据会在第一次访问属性时从数据库...
以下将分别介绍这些框架的核心概念以及在面试中可能涉及的知识点。 1. Struts作为MVC框架,负责控制层的处理。MVC模式将应用程序分为模型(Model)、视图(View)和控制器(Controller)三部分。在Struts中: - ...