Spring中事务问题
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition. --------------------编程问答-------------------- 这个要在spring的配置文件中进行操作。事物是否可操作,或者只读的 --------------------编程问答-------------------- <!-- 声明式事务处理事务操作对象 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!--
在此配置事务定义,事务定义通常会配置三部分,read-only配置是否是只读事务,不涉及增删改操作的业务层方法都要
配置成只读事务以便延迟加载propagation和isolation用来配置事务传播性和隔离性,其值可参考
TransactionDefinition类的静态变量事务通知
-->
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 默认中的设置
传播行为、隔离层级、超时、只读
<tx:method name="addObject" propagation="REQUIRED" isolation="DEFAULT" timeout="-1" read-only="false"/>
-->
<tx:method name="addObject" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="updateObject" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="deleteObject" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 声明式事务处理通常是针对业务层进行拦截操作的,配置声明式事务处理可以实现事务操作透明化、粗粒度、可配置 -->
<aop:config>
<aop:advisor pointcut="execution(* org.daoImple..*.*(..))" advice-ref="transactionAdvice" />
</aop:config> --------------------编程问答-------------------- 还是有上述的问题啊? --------------------编程问答-------------------- 管理session的问题。
添加OpenSessionInView过滤器,让session在一个request周期内关闭。
http://blog.sina.com.cn/s/blog_627efd530100wdi7.html --------------------编程问答-------------------- <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<!-- org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in
read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly'
marker from transaction definition
<init-param> 是用来解决此注释中的异常的 -->
<init-param>
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>
</filter>
没有加这个
<init-param>
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>
现在好了,谢谢回复 --------------------编程问答-------------------- <tx:method name="*" read-only="true" />
这句话去掉 --------------------编程问答-------------------- 乱讲滴,那句话不能去掉! --------------------编程问答-------------------- 受教了,一直没解决的问题,现在明白了~
补充:Java , Web 开发