笔者在配置了spring的opensessioninviewfilter之后,再次执行hibernate的save时,报了InvalidDataAccessApiUsageException,在网上查找了一下解决办法,原因是因为加了该filter之后,缺省的session是FlushMode.NEVER,这个session的模式是只读的,所以对于写操作自然就不行了,需要改变session的模式,该问题解决方法有以下两种途径:
1、使用spring的事务管理器管理事务,如果你配置了事务管理器,请检查你的操作对应的事务传播属性是否包含有readonly属性,如果有请去掉就可以了
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"></tx:method>
.......
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="pointcut" expression="execution(* *)"></aop:pointcut>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"></aop:advisor>
</aop:config>
2、
在调用hibernatesession之前修改session的模式,就不会出现该异常
转载于:https://blog.51cto.com/feidandelion/473437