Connection is read-only. Queries leading to data modification are not allowed

<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>

<!-- 让所有的方法都加入事务管理,为了提高效率,可以把一些查询之类的方法设置为只读的事务 -->

<!-- method name=*, readonly=true表示所有的数据库操作都可以使用,但是只能是读取数据库。

例如有UserService的方法 listUsers, 获取所有用户,就没问题。

但是如果是UserService的方法delUser, 要在dao层删除用户。就会报错误如下:

Connection is read-only. Queries leading to data modification are not allowed。

因此要添加下面的每一个add*,del*,update*等等。 分别给予访问数据库的权限。

-->

<tx:method name="*" propagation="REQUIRED" read-only="true" />

<!-- 以下方法都是可能设计修改的方法,就无法设置为只读 -->

<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="create*" propagation="REQUIRED" />
<tx:method name="clear*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>

在上面的beans.xml配置中, 一开始没有配置add*,del*,update*等等。 就会在调用相应的方法时出错。

而获取数据则没有问题, 是因为有

<tx:method name="*" propagation="REQUIRED" read-only="true" />

<pre name="code" class="html"><context:component-scan base-package="com.eq3z" />
	<!-- 配置事务管理器 -->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<!-- 配置事务传播特性 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="save*" propagation="REQUIRED"/>
			<tx:method name="update*" propagation="REQUIRED"/>
			<tx:method name="delete*" propagation="REQUIRED"/>
			<tx:method name="*" read-only="true"/>
		</tx:attributes>
	</tx:advice>
	<!-- 定义使用事务管理的方法 -->
	<aop:config>
		<aop:pointcut id="managerMethod" expression="execution(* com.service.*.*(..))"/>
		<aop:advisor  pointcut-ref="managerMethod" advice-ref="txAdvice"/>
	</aop:config>

Connection is read-only. Queries leading to data modification are not allowed

时间: 2024-11-29 03:29:32

Connection is read-only. Queries leading to data modification are not allowed的相关文章

java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed

org.springframework.dao.TransientDataAccessResourceException: ### Error updating database. Cause: java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed ### The error may involve defaultParameterMap ### T

spring+struts+mybatis中关于报错org.hibernate.exception.GenericJDBCException: Connection is read-only. Queries leading to data modification are not allowed 的产生原因及解决方案

spring.xml:文件 1 <tx:advice id="txAdvice" transaction-manager="transactionManager"> 2 <tx:attributes> 3 <tx:method name="save*" propagation="REQUIRED" read-only="false" /> 4 <tx:method

Connection is read-only. Queries leading to data modification are not allowed 错误原因

因为我再spring 中使用了AOP进行事务管理,有如下配置 <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- 定义事务传播属性 --> <tx:attributes> <tx:method name="insert*" propagation="REQUIRED" /> <tx:

Spring事务报Connection is read-only

昨天做项目时,写了个方法,程序突然报了Connection is readonly. Queries leading to data modification are not allowed调了程序半天,最后才发现是自己在spring配置文件中增加了事务.把方法写成了大写开头了,但是spring配置是以小写开头 代码如下: <bean id="transactionInterceptor" class="org.springframework.transaction.i

Spring 事务 readOnly 到底是怎么回事?

Spring的事务经常会有这样的配置: 1 <tx:method name="search*" read-only="true" /> 或者这样的注记: 1 @Transactional(readOnly = true) 正好我正在做的项目中这样配置了,而且偶然发现配置了不生效,本着“不弄明白对不起祖国对不起人民”的精神,参考了不少帖子和文档,总结了网上形形色色的答案,稍有收获,规整如下,不正确请指出. 1 readonly并不是所有数据库都支持的,不同

马士兵Spring-声明式事务管理-annotation

1.事务加在DAO层还是service层? service中可能多涉及多种DAO的操作,比如存了一个User之后,需要保存一条日志信息:如果在DAO中分别设置事务的话,一个DAO下面方法抛出异常了,但是不会影响到另一个DAO下面的方法,这是两个事务:因此事务要加在Service层: 2.需求:存一个user的同时,记录一个日志,说这个user被存了: 3.代码实现:--这边是spring管理hibernate下的transaction: 1)DAO实现:UserDAOImpl.java  --保

SpringDaoERROR

Exception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: No value supplied for the SQL parameter 'money': No value registered for key 'money'    at org.springframework.jdbc.core.namedparam.NamedParameterUtils.buildV

在spring+hibernaet+mysql事务处理中遇到的一些坑

spring的事务处理本来就是依赖于底层的实现,比如hibernate及数据库本身. 所以,当使用mysql数据库时,首先要确定的是,所操作的对象表是innodb格式的. 1. read-only方法中进行更新或插入操作时,并不总报错 在service层的方法中定义了事务,并且在spring配置文件中定义了如下的传播方式: <tx:attributes > <tx:method name="save*" propagation="REQUIRED"

Spring事务传播属性介绍(三).Nested

Required.Required_New传播属性分析传送门:https://www.cnblogs.com/lvbinbin2yujie/p/10259897.html Mandatory.Never.Not_Support传播属性分析传送门:https://www.cnblogs.com/lvbinbin2yujie/p/10260030.html 我的Spring事务传播属性介绍比较传送门:https://files.cnblogs.com/files/lvbinbin2yujie/Spr