1.使用spring管理事务,dao层使用spring  getHibernateTemplate操作数据库
2.web.xml里有这样的配置<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>
</filter>
事务配置<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
<prop key="create*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="reco*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="edit*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="set*">PROPAGATION_REQUIRED</prop>
<prop key="deploy*">PROPAGATION_REQUIRED</prop>
<prop key="submit*">PROPAGATION_REQUIRED</prop>
<prop key="merge*">PROPAGATION_REQUIRED</prop>
<prop key="bulk*">PROPAGATION_REQUIRED</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="have*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="search*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="select*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="show*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
3.在service层调用dao层save*方法时,除非在getHibernateTemplate().save(entity)后进行getSession().flush()操作,才能保存数据到数据库,否则不插入,使用hibernate  session直接save可以问题:如何配置让spring  getHibernateTemplate 进行更新操作时不刷新缓存就修改数据库数据。

解决方案 »

  1.   

    你这个hibernate是不是配置了二级缓存?
    如果是这样的话应该涉及到二级缓存访问数据库策略的问题了,baidu一下应该可以查到
      

  2.   

    没有用二级缓存,就是更新数据时,必须刷新hibernate缓存才会立刻提交
      

  3.   

    都有配置好,用hibernate session没问题,就是用spring 就必须得flush一下,不然控制台sql语句都不输出
      

  4.   

    声名transactionInterceptor以后,要在你的具体service中通过aop来把transactionInterceptor配置进去
    所以你要把service bean中配置transactionInterceptor
    你尝试一下,我是这么理解的
      

  5.   

    问题找到了,因为在web.xml里配置了hibernate延迟加载
    <filter>
        <filter-name>hibernateFilter</filter-name>
            <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
            <init-param>
                <param-name>singleSession</param-name>
                <param-value>true</param-value>
            </init-param>
            <init-param>
                <param-name>flushMode</param-name>
                <param-value>AUTO</param-value>
            </init-param>
        </filter>去掉就好了,为什么?延迟加载和这个有联系么……