问题
看报错内容,数据库对该涨表是只读的,可是我明明是正常插入数据嘛,怎么
就只读操作了?
原因
原因在事务的配置上,现在看xml中配置的事务管理器:
<aop:config>
<aop:pointcut expression="execution(* com.crm..service.*.*(..))" id="allMethodPointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="allMethodPointcut"/>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="edit*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="do*" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="*" propagation="REQUIRED" read-only="true"/>
</tx:attributes>
</tx:advice>
而我在service层对事务进行了控制,该方法随便用了个insert;
可以看到对于method匹配的时候,我没有按照约定的add或者save命名,而是自己写了一个insert导致匹配到*,所以给的权限就是只读;
解决
问题的解决就是按照事先事务配置的命名方式命名,改成add。这里也是要按照标准进行命名,不能随便命名;
问题解决;