gpt4 book ai didi

java - 当从 @Async 方法的 catch block 进行此 JPA 调用时,在 JPA 中使用主键删除单个记录不会生效

转载 作者:行者123 更新时间:2023-12-02 09:16:00 25 4
gpt4 key购买 nike

@Async
@Transactional(propagation = Propagation.REQUIRED)
void someMethod(Person p) {
try{
someApiCall();
} catch (Exception e) {
// plain SQL query with @Query & @Transactional on it
presonRepo.deletePersonViaId(p.getId());

// throwing runtime exception once above query is executed
}
}

方法是这样调用的::

someService.someMethod()

这里我也尝试过flush(),但是一旦执行catch block 就没有效果。当我删除异常并简单地返回执行时,它就起作用了!!!

最佳答案

我不确定你如何调用这个方法,但一般来说@Async有两个限制:

  • 它只能应用于公共(public)方法
  • 自调用(从同一个类中调用异步方法)将不起作用。

之所以存在这些规则是因为:

  1. 公共(public)方法,以便可以代理。

  2. 自调用不起作用,因为它绕过代理并直接调用底层方法。

关于java - 当从 @Async 方法的 catch block 进行此 JPA 调用时,在 JPA 中使用主键删除单个记录不会生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58983173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com