我有一个保存对象的方法,但我需要使用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时,未保存发票。我需要保存它。
答案 0 :(得分:2)
注释私有方法,或者甚至是从同一类的另一个方法调用的公共方法,都无法进行注释。
事务处理基于代理。
仅当您在注入到当前bean中的另一个bean上调用事务方法时,才能启动事务,以便包装另一个bean的事务代理会拦截该调用并开始事务。
阅读https://docs.spring.io/spring/docs/current/spring-framework-reference/data-access.html#tx-decl-explained。您似乎没有使用Spring,但是它在Java EE中的工作方式是相同的。