在Spring集成Hibernate后,进行save操作报错

在进行save操作时抛出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的过滤器加FlushMode,但是我这个只有Spring+Hibernate,哪来的web.xml。也有说加事务处理的,但是我加了事务,测试了无数遍,还是不行,请大神们帮忙下,谢谢,下面是我的xml配置

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<!-- Stock business object -->
<bean id="stockBo" class="com.yiibai.stock.bo.impl.StockBoImpl" >
    <property name="stockDao" ref="stockDao" />
</bean>

<bean id="stockDao" class="com.yiibai.stock.dao.impl.StockDaoImpl" >
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
    <property name="transactionManager" ref="transactionManager" />
    <property name="transactionAttributes">
        <props>
            <prop key="save">PROPAGATION_SUPPORTS</prop>  
        </props>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="dataSource" ref="dataSource" />
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="productBoProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="target" ref="stockDao" />
    <property name="interceptorNames">
        <list>
            <value>transactionInterceptor</value>
        </list>
    </property>
</bean>

下面是具体错误信息
Exception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: 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.
at org.springframework.orm.hibernate5.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1093)
at org.springframework.orm.hibernate5.HibernateTemplate.lambda$update$13(HibernateTemplate.java:658)
at org.springframework.orm.hibernate5.HibernateTemplate.doExecute(HibernateTemplate.java:383)
at org.springframework.orm.hibernate5.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:349)
at org.springframework.orm.hibernate5.HibernateTemplate.update(HibernateTemplate.java:657)
at org.springframework.orm.hibernate5.HibernateTemplate.update(HibernateTemplate.java:652)
at com.yiibai.stock.dao.impl.StockDaoImpl.update(StockDaoImpl.java:17)
at com.yiibai.stock.bo.impl.StockBoImpl.update(StockBoImpl.java:20)
at com.yiibai.common.App.main(App.java:28)

4个回答

dao上加上@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW )

marshalljian
marshalljian 还是不行。你这个是以注解方式加事务管理,我直接在xml配置了事务管理。
一年多之前 回复

谢谢uniqueweimeijun,除了加注解外,还需要在xml配置文件加配置,完整xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<!-- Stock business object -->
<bean id="stockBo" class="com.yiibai.stock.bo.impl.StockBoImpl" >
    <property name="stockDao" ref="stockDao" />
</bean>

<bean id="stockDao" class="com.yiibai.stock.dao.impl.StockDaoImpl" >
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="dataSource" ref="dataSource" />
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

uniqueweimeijun
uniquewdl 对的,尤其是最后这个<tx:annotation-driven transaction-manager="transactionManager" />是注解驱动一定要的
大约一年之前 回复

另外,其实我一开始的配置是可以的,只不过getBean的时候要使用代理bean,或者使用自动代理配置事务管理

建议:我今天也遇到了这个问题,不建议将readOnly设为false,这样就相当于把事务去掉了,当然就不报错了
原因:真正的原因在于你用没有事务的方法调用了有事务的方法,此时readOnly如果为true的话就会报这个错
解决:把没有事务的方法加到事务里

marshalljian
marshalljian 如果用注解的方式配置事务的话,可以将readOnly=false加在具体的方法上,而不是加在DAO类上;如果是按我原来的方式配置事务则不需要加这个readOnly
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Spring、hibernate集成的时候list save的问题
hibernate配置rn[size=13px][code=html]rnrn rn rn rn rn rn rn rn rn rn rn rnrnrnrn rn rn rn rn rn rn rn rn rn[/code][/size]rn类[size=13px][code=java]public class User rnrn private Integer id;rn private String username;rn private String password;rn private List workRecord = new ArrayList();rn ...get setrnrnpublic class WorkRecord rnrn private Integer id;rn private Integer userId;rn private String type;rn private Date dateTime;rn private String address;rn private double lat;rn private double lng;rn private String attachment;rn ...get setrn[/code][/size]rn[size=13px][code=sql]Hibernate: rnselectrn user0_.id as id0_0_,rn user0_.username as username0_0_,rn user0_.password as password0_0_ rnfromrn user user0_ rnwherern user0_.id=?rnHibernate: rninsert rnintorn workrecordrn (type, dateTime, attachment, lat, lng, address, id) rnvaluesrn (?, ?, ?, ?, ?, ?, ?)[/code][/size]rn上面我单独保存WorkRecord为什么出现的insert的sql里没有user_id和record_index,这些字段在数据里都有的
hibernate save的时候报错
[color=#993300]hibernate ORA-01400: 无法将 NULL 插入[/color]rnrn前提是,我确认我插入的这个值并不是Null ,而是""。不知道Hibernate怎么报错的。数据库使用的是oracle。rn主键策略使用uuid
hibernate 执行save方法报错
WARN: HHH000409: Using org.hibernate.id.UUIDHexGenerator which does not generate IETF RFC 4122 compliant UUID values; consider using org.hibernate.id.UUIDGenerator instead Exception in thread "main"
Spring和hibernate集成写API进行CRUD操作
配置maven引入spring 4和hibernate 4的依赖包: - spring-core - spring-webmvc - spring-orm - aspectjrt - hibernate-core - hibernate-entitymanager 另外引入必要的maven-plugin和junit用来跑unit test: - maven-compile
使用hibernate的save操作无效。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;中午快吃饭的时候问小弟任务作的怎么样,小弟突然和我说他遇到一个郁闷问题。在使用POI做Excel数据批量导入程序编写的时候,hibernate的save方法无效。但是从Form表单中提取信息做单个保存有效。Eclipse的控制台没有报错信息。 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp...
拓展-模拟Hibernate的save操作
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更的工具和接口,使数据库开发人员能够编写数据库应用程序。
Spring 集成Hibernate 并进行测试
Spring的相关配置 xml version="1.0" encoding="UTF-8"?> beans xmlns="http://www.springframework.org/schema/beans"      xmlns:p="http://www.springframework.org/schema/p"     xmlns:xsi="http://ww
spring和hibernate集成后,通用的basedao
对dao中的基础的增删改查和分页功能进行了封装,可以通用,代码复用性提高了
Struts、Spring、Hibernate集成
使用Struts、Spring、Hibernate集成技术 实现查询ORACLE数据库中EMP表中的所有雇员
spring和hibernate集成Demo
spring2.5和hibernate3.3集成的小Demo.
集成spring的hibernate懒加载
解决org.hibernate.LazyInitializationException: could not initialize proxy - no Session...
JSF集成Spring、Hibernate
JSF集成Spring、Hibernate jar包完整版 tomcat6或其他web服务器下部署运行。 (tomcat5 启动报错) 连接sqlserver 数据库。
FLEX和spring、hibernate的集成
FLEX和spring、hibernate的集成 FLEX和spring、hibernate的集成 FLEX和spring、hibernate的集成
Spring 和Hibernate集成问题?
写了个简单的 集成 rn 出现了如下问题 rnrn 21:40:36,015 WARN Configurator:126 - No configuration found. Configuring ehcache from rnrnehcache-failsafe.xml found in the classpath: jar:file:/C:/Program%20Files/MyEclipse%205.5%rnrn20GA/myeclipse/eclipse/plugins/com.genuitec.org.hibernate.eclipse_5.5.0/myeclipse-rnrndata/3.0/lib/ehcache-1.1.jar!/ehcache-failsafe.xmlrn21:40:36,484 WARN JDBCExceptionReporter:48 - SQL Warning: 0, SQLState: rn21:40:36,484 WARN JDBCExceptionReporter:49 - [Microsoft][SQLServer 2000 Driver for JDBC]rnrnDatabase changed to skyrn21:40:36,484 WARN JDBCExceptionReporter:48 - SQL Warning: 5701, SQLState: 01000rn21:40:36,484 WARN JDBCExceptionReporter:49 - [Microsoft][SQLServer 2000 Driver for JDBC]rnrn[SQLServer]已将数据库上下文改为 'sky'。rn21:40:36,484 WARN JDBCExceptionReporter:48 - SQL Warning: 0, SQLState: rn21:40:36,484 WARN JDBCExceptionReporter:49 - [Microsoft][SQLServer 2000 Driver for JDBC]rnrnLanguage changed to 简体中文rn21:40:36,484 WARN JDBCExceptionReporter:48 - SQL Warning: 5703, SQLState: 01000rn21:40:36,484 WARN JDBCExceptionReporter:49 - [Microsoft][SQLServer 2000 Driver for JDBC]rnrn[SQLServer]已将语言设置改为 简体中文。rnrn 使得对数据库的操作无法执行 知道的告诉下 真的谢谢了 rnrnrn代码参见 rnrn rn- rn- rn rn rn- rn rn rn- rn rn rn rnrnrnpackage com.guest.client;rnrnimport org.springframework.beans.factory.BeanFactory;rnimport org.springframework.context.support.ClassPathXmlApplicationContext;rnrnrnimport com.guest.usermangerImpl.UsermangerImpl;rnrnpublic class client rnrn /**rn * @param argsrn */rn public static void main(String[] args) rn rn rnrn BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");rn UsermangerImpl userManager = (UsermangerImpl)factory.getBean("guestbookmanger");rn try rn userManager.delect(7);rn catch (Exception e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn rn rn rnrn rn
Hibernate和spring集成
NULL 博文链接:https://1136051009.iteye.com/blog/1772776
Spring与Hibernate集成
NULL 博文链接:https://pan33.iteye.com/blog/1147543
Spring 与hibernate的集成
博文链接:https://shaqiang32.iteye.com/blog/201919
Spring与Struts、Hibernate的集成
Spring Struts Hibernate 集成 ppt
struts + hibernate +spring集成
struts + hibernate +spring集成
shiro集成hibernate和spring
采用的是maven管理工程 项目架构是 springmvc4.2.4.RELEASE+spring4.2.4.RELEASE+shiro1.22+hibernate5.1.0.Final 前端框架采用的是bootstrap 实现了角色+权限+用户的控制,另外为了能够更好的查看效果我加了一个实体类 即Info 权限才用的是注解方式 root -> admin可以添加角色,在添加的时候就可以选择所有的权限 其他用户可以根据权限的情况能够增加Info删除Info查看Info 然后是密码采用的是Base64加密 加密思路为 加密密码 String pass = password+salt(盐)==>然后调用Base64UU工具类的setString获取到加密密码 然后把加密密码和salt存入数据库 ---&gt;salt我是用uuid生成然后截取前面15位 解密同样很简单的String password = Base64UU.getString(password+salt); 解密后的密码要注意假如你的密码是123456盐是xxsdgshsgs 那么解密后的密码是123456xxsdgshsgs,利用String的截取方法截取password即可 String pass = Base64UU.getString(user.getPassword()); pass = pass.substring(0,pass.lastIndexOf(user.getSalt())); UserRealm Class主要是身份验证以及验证成功利用username获取角色和权限,然后在注入Subject中 之后就可以在Controller上面利用注解比如: @RequiresPermissions(value = { "user:select" }) 当然也可以利用Spring的aop也是一样呢 假如发现问题可以联系本人QQ134266212 或者邮箱noatnu@163.com
集成 Struts2/Spring/Hibernate
详细讲解,集成Struts2/ Spring / Hibernate的过程。
Spring集成Hibernate学习笔记
Spring集成Hibernate,Spring配置文件需要做的修改为: 1、配置数据源(dataSource)。 2、配置sessionFactory,Spring的主要类有AnnotationSessionFactoryBean(注解方式)和LocalSessionFactoryBean(hbm配置文件方式)。   Spring集成Hibernate后,可提供如下方式的操作: 1、...
Hibernate与Spring集成示例
      写了MyBatis与Spring的集成,今天写写Hibernate与Spring的集成。以前是别人集成好了自己直接用,今天自己集成一下。与MyBatis学习笔记系列一样,本篇依然采用courseman数据库(数据库的创建请参见笔者博客:MyBatis入门示例),及ant来管理工程(对ant不熟悉的朋友请参见笔者的相关博客:ant的下载与安装,ant入门示例,)。本示例的任务是...
Struts2,spring,Hibernate集成
NULL 博文链接:https://yusudong.iteye.com/blog/962170
Spring集成Hibernate
Spring集成Hibernate,有数据库和日志说明。
Flex、Spring、Hibernate 集成
通过这篇文章,您能清晰地了解由 Flex、Spring、Hibernate 集成的 RIA 应用框架的技术细节以及怎样使用该框架开发具体的应用。
stuts2 spring hibernate 集成
完整的SSH集成,STRUTS2.0+SPRING 2.5+ HIBERNATE 3.6完美集成
struts2 spring hibernate集成
struts2 spring hibernate集成 介绍上传下载。。
spring集成Struts与Hibernate
关于spring集成Struts+Hibernate的详细介绍,欢迎大家借鉴!
spring集成hibernate
hibernate集成spring的实例,让你一看就懂
CXF集成spring hibernate
自己在用的接口框架,实现了CXF和spring和hibernate的集成
spring集成Hibernate
本文主要讲解如何在Spring4.0.4下整合Hibernate4.3.6; 主要介绍了如下内容: 项目结构的规划; Spring MVC的配置和使用; Spring下整合Hibernate的具体过程; 数据源的配置; jdbcTemplate和HibernateTemplate两种方式操作数据库;
Spring Hibernate 集成的例子
NULL 博文链接:https://xwhoyeah.iteye.com/blog/517879
Spring与Hibernate集成---声明式事务
NULL 博文链接:https://chenming47.iteye.com/blog/437199
Spring与Hibernate集成声明式事务
      看到你一个熟悉好像也陌生的样子,Spring、Hibernate、事务。问问你名字背后的含义,Spring简单来说是一个轻量级的控制反转IOC和面向切面AOP的容器框架;Hibernate是一个开放代码源对象关系映射框架;事务Transaction是访问并可能更新数据库中各种数据项的一个程序执行单元。       它们之间集成管理的关系,spring是中间的桥梁,对事物的管理有多种方...
spring集成hibernate问题
public class myDao extends HibernateDaoSupport rn rn public List method1() rn String hql = "from users";rn Query query = getSession().createQuery(hql);rn return query.list();rn rnrn public List method2() rn return this.getHibernateTemplate().executeFind(new HibernateCallback() rn public Object doInHibernate(Session session) throws HibernateException, SQLException rn String hql = "from users";rn Query query = session.createQuery(hql);rn List list = query.list();rn return list;rn rn );rn rnrnrnrn请问方法一和方法二有没有区别,区别在哪里?rnrn
spring 与hibernate的集成
spring 与hibernate的集成方法 spring 与hibernate的集成方法
Struts,Spring与hibernate集成
Struts,Spring与hibernate的整合文档提供参考。
struts2 + spring + hibernate的集成
博文链接:https://kdisk-sina-com.iteye.com/blog/235792
集成Spring和SpringMVC和Hibernate下
将前面讲过的Spring5、SpringMVC、Hibernate5和前端框架Easyui整合起来最终完成一个基于角色和资源的权限控制模型,完全当成真实的项目来做的,能让同学们进一步的提升实战开发能力!
相关热词 c#部署端口监听项目、 c#接口中的属性使用方法 c# 昨天 c#func链接匿名方法 c#怎么创建文件夹 c#从键盘接收空格 c#da/ad c#部门请假管理系统 c#服务器socket c# 默认的访问修饰符