Write operations are not allowed in read-only mode (FlushMode.MANUAL)异常解决的一种方法

异常: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>hibernateFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>hibernateFilter</filter-name>
    <url-pattern>*.do</url-pattern>
  </filter-mapping>


spring事件配置如下:
	<aop:config>
		<aop:pointcut id="txServices" expression="execution(* com.cnlive.dms.service..*.*(..))"/>
		<aop:advisor advice-ref="txAdvice" pointcut-ref="txServices"/>
	</aop:config>
	
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="add*" propagation="REQUIRED"/>
			<tx:method name="insert*" propagation="REQUIRED"/>
			<tx:method name="update*" propagation="REQUIRED"/>
			<tx:method name="delete*" propagation="REQUIRED"/>
		</tx:attributes>
	</tx:advice>


Service中是这样的:
	
	@Override
	public boolean createAdmin(Admin admin) {
		// TODO Auto-generated method stub
		Admin ad=adminDao.getAdminByUsername(admin.getUsername());
		if(ad==null){
			adminDao.insertAdmin(admin);
			return true;
		}
		return false;
	}


在运行到createAdmin方法中的adminDao.insertAdmin(admin);时就报异常。

解决方法:
   将createAdmin方法配置到spring的事件中管理,添加了以下的一条配置

<tx:method name="create*" propagation="REQUIRED"/>


具体spring事件配置如下:
	<aop:config>
		<aop:pointcut id="txServices" expression="execution(* com.cnlive.dms.service..*.*(..))"/>
		<aop:advisor advice-ref="txAdvice" pointcut-ref="txServices"/>
	</aop:config>
	
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="add*" propagation="REQUIRED"/>
			<tx:method name="insert*" propagation="REQUIRED"/>
			<tx:method name="update*" propagation="REQUIRED"/>
			<tx:method name="delete*" propagation="REQUIRED"/>
			<tx:method name="create*" propagation="REQUIRED"/>
		</tx:attributes>
	</tx:advice>


呵呵!问题就这样简单的解决了!不知道我们碰到的问题是否一样!

你可能感兴趣的:(spring,Hibernate)