在Spring核心配置文件中没有增加事务方法,导致以上问题

Action类UserAction

package com.swift.action;

import com.opensymphony.xwork2.ActionSupport;
import com.swift.service.UserService; public class UserAction extends ActionSupport {
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
@Override
public String execute() throws Exception {
System.out.println("action..................");
userService.add("fly","War of Mercenaries");
userService.add("big-dog","War of Mercenaries");
userService.add("ram","War of Mercenaries");
userService.add("rabbit","War of Mercenaries");
userService.add("hama","War of Mercenaries");
userService.add("shiguan","War of Mercenaries");
userService.update("ram","War of Mercenaries","公羊","佣兵的战争");
userService.delete("rabbit","War of Mercenaries");
userService.getOne(2);
userService.findAll();
userService.findYouWant("ram","War of Mercenaries");
return NONE;
} }

UserService类

package com.swift.service;

import org.springframework.transaction.annotation.Transactional;

import com.swift.dao.UserDao;
@Transactional
public class UserService { private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add(String userName,String address) {
System.out.println("UserService.................add");
userDao.add(userName,address);
}
public void update(String userName,String address,String modifyName,String modifyAddress) {
System.out.println("UserService.................update");
userDao.update(userName,address,modifyName,modifyAddress);
}
public void delete(String userName,String address) {
System.out.println("UserService.................delete");
userDao.delete(userName,address);
}
public void getOne(int number) {
System.out.println("UserService.................get the number of");
userDao.getOne(number);
}
public void findAll() {
System.out.println("UserService.................find all");
userDao.findAll();
}
public void findYouWant(String userName,String address) {
System.out.println("UserService.................find you want");
userDao.findYouWant(userName,address);
} }

UserDao接口

package com.swift.dao;

public interface UserDao {
public void add(String userName,String address);
public void update(String userName,String address,String modifyName,String modifyAddress);
public void delete(String userName,String address);
public void getOne(int number);
public void findAll();
public void findYouWant(String userName,String address);
}

UserDaoImplements类

package com.swift.dao;

import java.util.List;

import org.springframework.orm.hibernate5.HibernateTemplate;

import com.swift.entity.User;

public class UserDaoImplements implements UserDao {
private HibernateTemplate hibernateTemplate;
private User user; public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
} public void setUser(User user) {
this.user = user;
} @Override
public void add(String userName, String address) {
// 增加
user.setUsername(userName);
user.setAddress(address);
hibernateTemplate.save(user);
} @Override
public void update(String userName, String address, String modifyName, String modifyAddress) {
List<User> list = (List<User>) hibernateTemplate.find("from User where userName=? and address=?", userName,
address);
if (list != null) {
for (User user : list) {
System.out.println(user.getUsername() + " :: " + user.getAddress());
user.setUsername(modifyName);
user.setAddress(modifyAddress);
hibernateTemplate.update(user);
}
} else {
System.out.println("您要更新的记录不存在!!!!!");
}
} @Override
public void delete(String userName, String address) {
List<User> list = (List<User>) hibernateTemplate.find("from User where userName=? and address=?", userName,
address);
if (list != null) {
for (User user : list) {
System.out.println(user.getUsername() + " :: " + user.getAddress());
hibernateTemplate.delete(user);
}
} else {
System.out.println("您要删除的记录不存在!!!!!");
}
} @Override
public void getOne(int number) {
User user = hibernateTemplate.get(User.class, number);
System.out.println(user.getUsername() + " :: " + user.getAddress());
} @Override
public void findAll() {
List<User> list = (List<User>) hibernateTemplate.find("from User");
for (User user : list) {
System.out.println(user.getUsername() + " :: " + user.getAddress());
}
} @Override
public void findYouWant(String userName, String address) {
List<User> list = (List<User>) hibernateTemplate.find("from User where userName=? and address=?", userName,
address);
System.out.println(list.toString());
for (User user : list) {
System.out.println(user.getUsername() + " :: " + user.getAddress());
}
} }

User实体类:

package com.swift.entity;

public class User {

    private Integer uid;
private String username;
private String address;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public User(String username, String address) {
this.username = username;
this.address = address;
}
public User(Integer uid, String username, String address) {
this.uid = uid;
this.username = username;
this.address = address;
}
public User() {
super();
// TODO Auto-generated constructor stub
} }

web.xml 自动启动监听和过滤器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>2018-01-03_Spring_Hibernate</display-name> <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:bean.xml</param-value>
</context-param> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <filter>
<filter-name>struts2</filter-name>
<filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>

Spring核心配置文件bean.xml 通过引入各个分模块

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- c3p0连接池得到dataSource -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/sw_database"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean> <!-- 创建hibernate事务管理器 -->
<bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 启动Hibernate事务管理器 -->
<tx:annotation-driven transaction-manager="hibernateTransactionManager"></tx:annotation-driven> <!-- 引入分模块 -->
<import resource="classpath:User.xml"/> </beans>

分模块User.xml 只负责Action部分

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <bean id="userAction" class="com.swift.action.UserAction" scope="prototype">
<property name="userService" ref="userService"></property>
</bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- Hibernate核心配置文件没有连接数据库,所以需要注入 -->
<property name="dataSource" ref="dataSource"></property>
<!-- Hibernate核心配置文件的位置 -->
<property name="configLocations" value="classpath:hibernate.cfg.xml"></property>
</bean> <bean id="userService" class="com.swift.service.UserService">
<property name="userDao" ref="userDaoImplements"></property>
</bean> <bean id="userDaoImplements" class="com.swift.dao.UserDaoImplements">
<property name="hibernateTemplate" ref="hibernateTemplate"></property>
<property name="user" ref="user"></property>
</bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<!-- 前一个sessionFactory是HibernateTemplate类内部的 -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <bean id="user" class="com.swift.entity.User"></bean> </beans>

Hibernate核心配置文件hibernate.cfg.xml

<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sw_database</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property> -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 方言的数字很重要一定找到该项目名的连接类 --> <property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property><!-- 别处复制过来的代码要重新在Eclipse中一点点输入否则会出错 --> <!-- create: 先删表,再建表。 create-drop: 启动时建表,退出前删表。 update: 如果表结构不一致,就创建或更新。
validate: 启动时验证表结构,如果不致就抛异常。 -->
<property name="hibernate.hbm2ddl.auto">update</property> <!--指定映射文件,可映射多个映射文件 -->
<mapping resource="User.hbm.xml"></mapping>
</session-factory> </hibernate-configuration>

Hibernate映射文件

<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 实体类映射文件 -->
<hibernate-mapping> <class name="com.swift.entity.User" table="t_user">
<!-- 主键 -->
<id name="uid">
<generator class="native"></generator>
</id>
<!-- 其他属性 -->
<property name="username"/>
<property name="address"/>
</class> </hibernate-mapping>

struts2的Action配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<package name="default" extends="struts-default" namespace="/"> <!-- action的class不要写全名会创建两个对象,而写Spring配置文件中id的内容,只建一个对象
前提有struts2-spring-plugin-2.3.4.1.jar --> <action name="userAction" class="userAction">
</action>
</package>
</struts>

浏览器操作

控制台显示

数据库显示

ssh整合思想 Spring分模块开发 crud参数传递 解决HTTP Status 500 - Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or(增加事务)的更多相关文章

  1. spring整合问题分析之-Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

    1.异常分析 Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into ...

  2. spring整合之后运行报什么只读错误。Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

    解决办法, 再大dao的实现类上添加注解: @Transactional(readOnly = false ) 不让它只读就行了

  3. ssh中的 Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

    这个错误我整理了  半天才发现问题的存在. 尝试了网上的很多办法,但是最后都没有达到效果. 包括这两种: 第一种: web.xml种的配置 <filter> <filter-name ...

  4. ssh整合思想 Spring与Hibernate的整合 项目在服务器启动则自动创建数据库表

    Spring整合Hibernate Spring的Web项目中,web.xml文件会自动加载,以出现欢迎首页.也可以在这个文件中对Spring的配置文件进行监听,自启动配置文件, 以及之前Struts ...

  5. ssh整合思想 Spring与Hibernate和Struts2的action整合 调用action添加数据库 使用HibernateTemplate的save(entity)方法 update delete get 等方法crud操作

    UserAction类代码: package com.swift.action; import com.opensymphony.xwork2.ActionSupport; import com.sw ...

  6. ssh整合思想 Spring与Hibernate的整合ssh整合相关JAR包下载 .MySQLDialect方言解决无法服务器启动自动update创建表问题

    除之前的Spring相关包,还有structs2包外,还需要Hibernate的相关包 首先,Spring整合其他持久化层框架的JAR包 spring-orm-4.2.4.RELEASE.jar  ( ...

  7. spring分模块开发

  8. Spring_day04--HibernateTemplate介绍_整合其他方式_Spring分模块开发

    HibernateTemplate介绍 1 HibernateTemplate对hibernate框架进行封装, 直接调用HibernateTemplate里面的方法实现功能 2 HibernateT ...

  9. Maven02——回顾、整合ssh框架、分模块开发、私服

    1 回顾 1.1 Maven的好处 节省空间 对jar包做了统一管理 依赖管理 一键构建 可跨平台 应用在大型项目可提高开发效率 1.2 Maven安装部署配置 1.3 Maven的仓库 本地仓库 远 ...

随机推荐

  1. 2017-9-20 NOIP模拟赛

    A 约数之和 (count.pas/c/cpp)TL:1S ML:128MB[Description]我们用 D(x)表示正整数 x 的约数的个数.给定一个正整数 N,求 D(1)+D(2)+…+D( ...

  2. java.lang.NoClassDefFoundError: com/sun/tools/javac/processing/JavacProcessingEnvironment

    最近项目用到了java程序动态编译java源文件,运行程序一直报错,提示错误如下: Can't initialize javac processor due to (most likely) a cl ...

  3. SpringMVC之WebMVC介绍

    一.MVC是什么 二.常用的MVC框架 三.MVC模式的优缺点 四.SpringMVC简介

  4. C 语言实例 - 输出九九乘法口诀表

    C 语言实例 - 输出九九乘法口诀表 使用嵌套 for 循环输出九九乘法口诀表. 实例 #include<stdio.h> int main(){ //外层循环变量,控制行 ; //内层循 ...

  5. STP-9-处理RSTP中的拓扑变化

    STP能识别四种不同的拓扑变化事件, 而RSTP只有当非边界端口从非转发状态变为转发状态才认为发生了拓扑变化事件 因为刚变为转发状态的端口可以为一些mac地址提供比之前更好的路径,CAM表需要更新.失 ...

  6. Codeforces Round #562 (Div. 2) B. Pairs

    链接:https://codeforces.com/contest/1169/problem/B 题意: Toad Ivan has mm pairs of integers, each intege ...

  7. csdn自动展开+去广告+净化剪切板+免登陆(如有侵权,立即删博)

    对于csdn的广告大家想必......又没钱充VIP,怎么办,下面是脚本源码: 重要的事说三遍:如有侵权,立即删除!如有侵权,立即删除!如有侵权,立即删除! // ==UserScript== // ...

  8. 去掉word文档两边的空白

    1.设置-页面布局-页边距,把左边距和右边距的数据设置到最小就好,一般为0.43CM 2.把WORD页面顶部标尺,左右拉到最底,如图: 3.在打印预览里,设置页边距,操作方法同 上述 1,如图:

  9. 使用xadmin覆盖Django的admin

    安装xadmin pip 安装 pip install xadmin  可能会报错 pip install git+git://github.com/sshwsfc/xadmin.git 安装后要使用 ...

  10. Spring-boot原理(附带实现一个spring-boot-starter实例和代码下载)

    ​ (我就是个封面) Spring-boot自出现后,到现在火的很,大家貌似都在用,连招聘里面也要求会这个.但是说实话,spring-boot无外乎想实现一种可插拔的编程方式,说是简化配置,其实并没有 ...