gpt4 book ai didi

java - 如何回滚第一个事务而不回滚新事务?

转载 作者:行者123 更新时间:2023-12-02 01:13:16 24 4
gpt4 key购买 nike

我有一个保存对象的方法,但我需要使用 API 并保存它们的返回。如果 API 返回“未授权”,我需要回滚事务,但我想保留返回。

例如

@Resource
private SessionContext context;

@Transactional
public Invoice createSale(SaleDTO saleDTO) {
this.dao.save(saleDTO);

Send send = this.context.getBusinessObject(Send.class);
Invoice invoice = this.send.send(saleDTO);

if (invoice.isAuthorized()) {
invoice.setSale(saleDTO);

return invoice;
} else {
throw new IllegalArgumentException();
}
}

public class Send implements Serializable {
@Transactional(Transactional.TxType.REQUIRES_NEW)
private Invoice send(SaleDTO saleDTO) {
Invoice invoice;

...

this.dao.save(invoice);

return invoice;
}
}

当我抛出 IllegalArgumentException 时,发票未保存。我需要保存它。

最佳答案

注释私有(private)方法,甚至从同一类的另一个方法调用的公共(public)方法,都不起作用。

事务处理基于代理。

只有在调用另一个 bean 上的事务方法并注入(inject)到当前 bean 中时,才能启动事务,以便包装另一个 bean 的事务代理拦截该调用并启动事务。

阅读https://docs.spring.io/spring/docs/current/spring-framework-reference/data-access.html#tx-decl-explained 。您似乎没有使用 Spring,但它在 Java EE 中的工作方式是相同的。

关于java - 如何回滚第一个事务而不回滚新事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59036208/

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