public class BeforeTransactionCompletionInterceptor extends EmptyInterceptor {
@Override
public void beforeTransactionCompletion(Transaction tx) {
// do something before commit
}
}
@Aspect
@Component
public class CallStoredProcedureBeforeCommitAspect implements Ordered {
@Pointcut("@annotation(org.springframework.transaction.annotation.Transactional)")
public void transactionnalMethod() {}
@After("transactionnalMethod()")
public void callStoredProcedureAfter(JoinPoint joinPoint) {
// do something after
}
@Override
public int getOrder() {
return a_higher_priority;
}
}
1条答案
按热度按时间pokxtpni1#
根据你想要什么,我知道你有两个选择。
如果要在hibernate提交的每个事务之前执行操作,可以使用
Interceptor
(javadoc)。这样,在hibernate级别的每次提交之前都会运行代码。这意味着即使不是通过spring管理的事务也会调用您的存储过程。
另一方面,如果您想在spring和
@Transactional
注解,您可以尝试使用spring aop。使用aop时,不要忘记通过设置
@EnableTransactionManagement(order = a_lower_priority)
,或xml中的等效值。否则,将在之后而不是之前调用存储过程。