浏览 1589 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-19
<bean id="baseTxService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true"> <property name="transactionManager" ref="transactionManager" /> <!-- <property name="proxyTargetClass" value="true" />--> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> <property name="postInterceptors"> <list> <bean class="org.springframework.orm.hibernate3.HibernateInterceptor"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> </list> </property> </bean> <bean id="userService" parent="baseTxService"> <property name="target"> <bean id="userServiceTarget" class="jbase.user.service.UserService"> <property name="dao" ref="userDAO" /> <property name="roleDAO" ref="roleDAO" /> </bean> </property> </bean> 最近将事务配置换成了Spring2.0的风格,结果在update,save,delete操作时出现了那个经典的OpenSessionInView引起的错误: 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. 配置如下 <aop:config proxy-target-class="true"> <aop:advisor pointcut="execution(* jbase..*UserService.*(..))" advice-ref="txAdvice" /> <!-- <aop:advisor pointcut="execution(* jbase..*DAO.*(..))" advice-ref="txAdvice" /> --> </aop:config> <!-- 支持 @Transactional 标记 --> <tx:annotation-driven /> <!-- 支持 @AspectJ 标记--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="delete*" propagation="REQUIRED" read-only="false" /> <tx:method name="update*" propagation="REQUIRED" read-only="false" /> <tx:method name="save*" propagation="REQUIRED" read-only="false" /> <tx:method name="find*" propagation="REQUIRED" read-only="false" /> <tx:method name="*" read-only="false" /> </tx:attributes> </tx:advice> <bean id="userService" class="jbase.user.service.UserService"> <property name="dao" ref="userDAO" /> </bean> 根据原来的一些资料,只在事务是spring管理的,应该就不会出现这样的情况,spring会自动从OpenSessionInView取得session,并将它设置为Flush.Auto。 这个事务配置应该是起了作用,因为我在单元测试时测试了事务的完整性。 自己找了好久的资料一直没有解决,请大家帮忙? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |