一尘不染

Spring Hibernate,如何在事务提交或事务回滚后调用某些方法

hibernate

事务成功或回滚后,我需要调用某些方法。我正在使用

    <bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
                <property name="sessionFactory">
                    <ref local="mysessionFactory"/>
                </property>
    </bean>

    <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref local="mysessionFactory"/>
        </property>
    </bean>

<tx:annotation-driven transaction-manager="txManager" proxy-target-class="true"/>

该应用程序使用一些外部Web服务,这些内部Web服务在回滚内部事务时需要“清除”。有没有办法在不使用声明式事务管理的情况下完成此操作。


阅读 264

收藏
2020-06-20

共1个答案

一尘不染

  • 在Hibernate中,您可以扩展EmptyInterceptor和覆盖 afterTransactionCompletion()方法并将其注册在 SessionFactoryBean或中HibernateTransactionManager

  • 在Spring中,您可以使用扩展TransactionSynchronizationAdapter,覆盖afterCompletion()和注册 TransactionSynchronizationManager#registerSynchronization()

编辑

使用Spring Aop向所有带注释的方法添加同步的示例 @Transactional

@Aspect
class TransactionAspect extends TransactionSynchronizationAdapter {

    @Before("@annotation(org.springframework.transaction.annotation.Transactional)")
    public void registerTransactionSyncrhonization() {
        TransactionSynchronizationManager.registerSynchronization(this);

    }

    @Override
    public void afterCompletion(int status) {
        // code 
    }
}
2020-06-20