アリババの「Java開発マニュアル」:あなたは、ロールバックトランザクションを手動でロールバックすることを確認する必要がある場合は、トランザクションのシーンは、漁獲後にスローされました。
方法は全体的に、メモを作成して、割引の契約を作成する必要割り引く次のリリースでは、トランザクションです。キャッチキャッチ例外の後、明示的にDBに提出し、「作成ノート」の前、その後、ロールバックされていない場合。だから、トランザクションの一貫性を確保するためには、手動でトランザクションをロールバックする必要があり、最高の単一故障を返します。
パブリック クラスTradeOrderServiceImpl { @Autowired TradeOrderServiceImpl tradeOrderService。 @Autowired DraftInfoServiceImpl draftInfoService。 / ** *发布贴现 * * / @Transactional 公共ResponseModel公開(文字列merId、列openBank、のBigDecimal AMT){ DraftInfoModel draftInfoModel = 新しいDraftInfoModel()。 draftInfoModel.setMerchantId(merId)。 draftInfoModel.setAmt(AMT)。 ... ... // 创建票据 DraftInfoModel res_draftInfoModel = draftInfoService.addDraftInfo(draftInfoModel)。 試し{ TradeOrderModel tradeOrderModel = 新新TradeOrderModel(); tradeOrderModel.setSellerMerchantId(merId); tradeOrderModel.setOpenBank(openBank); // 異常データのopenBank長いMySQLの原因は列に切り捨て。 tradeOrderModel.setPlatFeeAmt(AMT); tradeOrderModel.setDraftId(res_draftInfoModel.getDraftId()); ... // 割り引かトランザクションを作成します TradeOrderModelRes tradeOrderModelRes = tradeOrderService.publishDraftDiscount(tradeOrderModel); } キャッチ(例外E){ // 手動バックロール総務 TransactionAspectSupport.currentTransactionStatus()のsetRollbackOnly();. //が最も高い単一の障害を返す 返さ 新新(ResponseModelをfalseに、ExceptionUtils.getMessage(E)); } // 最高の単一の完全返す リターン 新新(ResponseModel trueにします;) } }