这两天被两个异常弄的头都大了,经过网上查资料,终于把问题解决了。如果各位有好的解决方案,忘指教。
首先遇到以下异常:
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
网上有些解决方案是在web.xml文件中改写以下代码(红色部分为改写后)
<filter>
<filter-name>openSessionInView</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>openSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
但是会引发发一个新的异常,org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions,如先执行查询操作,再进行更新操作。
最后通过查找网上资料,终于找到解决方案。
最终解决方案:
重写类OpenSessionInViewFilter类中的getSession和closeSession方法:
@Override
protected void closeSession(Session session, SessionFactory sessionFactory) {
session.flush();
super.closeSession(session, sessionFactory);
}
@Override
protected Session getSession(SessionFactory sessionFactory)
throws DataAccessResourceFailureException {
Session session = SessionFactoryUtils.getSession(sessionFactory, true);
session.beginTransaction();
FlushMode flushMode = getFlushMode();
if (flushMode != null) {
this.setFlushMode(FlushMode.AUTO);
}
session.getTransaction().commit();
return session;
}
然后再web.xml中写入如下代码:
<filter>
<filter-name>openSessionInView</filter-name>
<filter-class>。。。。。。.MyOpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
OK!到此问题解决。
如果各位有好的方法,请赐教。
分享到:
相关推荐
SSH2,全称为Struts2、Hibernate2和Spring2,是一种经典的Java Web开发框架组合,用于构建企业级应用。这个组合提供了模型-视图-控制器(MVC)架构模式、对象关系映射(ORM)以及依赖注入(DI)等功能,大大简化了...
SSH框架,全称为Spring、Struts2和Hibernate的集成,是Java Web开发中常见的三大开源框架的组合。这些框架各自负责应用的不同层面:Spring提供IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)功能...
SSH 框架 Ajax 获取的 JSON 格式数据处理过程 在本文中,我们将详细讲解如何使用 SSH 框架中的 Ajax 获取的 JSON 格式数据处理过程,并且实现菜单联动下拉框的功能。 一、Ajax 中 response 返回的数据是一个二维...
SSH框架是指Struts2、Spring、Hibernate这三种技术的组合,常被用于Java Web开发中。全注解配置相较于XML配置更加简洁,易于维护,因此在现代Web项目开发中越来越受到青睐。本文将详细介绍如何搭建一个基于全注解...
SSH整合是指将Spring、Hibernate和Struts2这三大开源框架集成在一起,用于构建高效、模块化的Java Web应用程序。这些框架分别负责不同的职责:Spring作为IoC(Inversion of Control)容器,提供依赖注入和AOP(面向...
SSH框架,即Struts2、Spring和Hibernate的组合,是Java企业级应用开发中的经典选择。这个框架提供了模型-视图-控制器(MVC)架构模式,支持数据持久化、依赖注入以及业务逻辑控制。以下是对搭建SSH框架的详细步骤的...
SSH整合是Java开发中一种常见的框架集成方式,主要包括Spring、Struts2和Hibernate三个部分。这些框架的结合能够提供一个强大的、松耦合的MVC(Model-View-Controller)架构,便于开发复杂的Web应用程序。 **Spring...
SSH是Struts2、Hibernate和Spring的组合,是Java Web开发中的经典MVC框架。在DWR+SSH项目中,它们协同工作以实现更复杂的功能: 1. **Struts2** - 负责处理HTTP请求,提供控制器逻辑,将请求转发给相应的Action。在...
SSH框架是Java Web开发领域内非常流行的一种组合框架,分别由Struts2、Spring和Hibernate三个技术组成。其中Struts2负责处理Web层逻辑;Spring则主要作为业务逻辑层的容器;Hibernate则承担了持久化层的角色。本文将...
SSH分别代表Struts2(一个MVC框架)、Hibernate(一个对象关系映射框架)和Spring(一个全面的企业级应用框架)。Flex是Adobe开发的富互联网应用程序(RIA)框架,主要用于创建动态、交互式的用户界面。 在SSH+Flex...
SSH2.0 配置日记记录了 Spring 2.5、Hibernate、Struts2.1、ConnectionPool 等技术栈的集成和配置过程,涉及到了多个知识点,包括 Spring 配置、Hibernate 配置、Struts2 配置、ConnectionPool 配置、数据库配置、...
SSH(Struts2、Spring、Hibernate)是一个常见的Java Web开发框架组合,用于构建高效、可扩展的企业级应用。以下是SSH框架集成的基本配置过程: 1. **Hibernate配置**: - 删除`hibernate.cfg.xml`,因为我们将...
SSH是Java Web开发中的一个流行框架组合,由Struts、Hibernate和Spring三个组件构成。这个框架集成提供了模型-视图-控制器(MVC)架构,数据持久化,以及依赖注入和事务管理等功能,大大简化了企业级应用的开发工作...
在Java Web开发中,SSH(Struts2、Spring和Hibernate)是一个常见的集成框架,用于构建高效、可扩展的Web应用程序。SSH整合涉及三个核心组件:Struts2负责控制层,Spring处理业务逻辑和依赖注入,而Hibernate则管理...
SSH框架指的是Struts2、Spring以及Hibernate三个技术的集成。本文将详细地介绍如何从零开始搭建一个完整的SSH框架,并为初学者提供一套可参照的实践指南。 #### 二、准备工作 1. **安装Eclipse或IntelliJ IDEA**:...