到目前为止我所理解的是,当你使用@Transactional注释时,任何失败都会导致操作回滚到之前的状态。我有这个方法,它使用spring PagingAndSortingRepository接口将Items添加到引号中。
@Override
public Quotation createNewQuotation(PurchaseRequest purchaseRequest, Supplier supplier) {
Quotation quotation = new Quotation();
Date now = new Date(Calendar.getInstance().getTimeInMillis());
quotation.setQuotationDate(now);
quotation.setPurchaseRequest(purchaseRequest);
quotation.setSupplier(supplier);
quotationRepository.save(quotation);
return quotation;
}
当我在整个类上放置一个@Transactional注释并手动测试操作是否会回滚(通过不选择任何供应商)时,其他属性如quotationDate,PurchaseRequest仍然存储在数据库中。
我感觉我没有使用@Transactional注释。可能是什么问题,我该怎么做才能解决它?
答案 0 :(得分:1)
感谢您的回复。
我通过在我的主课上添加@EnableTransactionManagement
来完成这项工作。
我解决了
bean' purchaseRequestServiceImpl'无法注入 ' com.eprocurement.service.PurchaseRequestServiceImpl'因为它是一个 实现的JDK动态代理: com.eprocurement.service.PurchaseRequestService行动:考虑一下 将bean注入其接口之一或强制使用 基于CGLib的代理通过在@EnableAsync上设置proxyTargetClass = true 和/或@EnableCaching。
将@Transactional
注释放在我的服务接口上,@autowiring
而不是@autowiring
我的实现类。