笔者在配置了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、

    HibernateTemplate tmp=getHibernateTemplate();
    tmp.setFlushMode(HibernateTemplate.FLUSH_EAGER);  
    在调用hibernatesession之前修改session的模式,就不会出现该异常