报错信息:
严重: Exception occurred during processing request: 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.
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.hibernate4.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1135)
at org.springframework.orm.hibernate4.HibernateTemplate$24.doInHibernate(HibernateTemplate.java:789)
原因:SSH 曾删改时,没有添加开启事务,报上面错误。
添加事务:
在applicationContext中增加hibernate的配置信息
1:hibernateTemplate
<!-- 配置hibernateTemplate -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
2:sessionFactory
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="c3p0"/>
<property name="configLocations" value="classpath:hibernate.cfg.xml"/><!-- 加载hibernate数据描述文件 -->
</bean>
3:txManger
<!-- 开启事务管理 -->
<bean id="txManger" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
4:注解的动态代理
<!-- 开启hibernate事务注解代理,proxy-target-class默认值为false,则代表不启用事务注解,此时的代理模式为jdk代理
如果proxy-target-class属性值为true,则代表开启事务注解,此时代理模式为cglib代理
proxy-target-class设置为true之后,对于数据库事务(写)默认为只读状态,
可以在action中注解@Transactional中的属性值readOnly修改为false,则代表可读可写状态
-->
<tx:annotation-driven transaction-manager="txManger" proxy-target-class="true"/>
在dao或service上添加
@Transactional(readOnly=false)//默认为true--只读状态,false----可读可写状态