我的班级被定义为
@Transactional
@Service
public class InteractionHistoryServiceImpl implements InteractionHistoryService {
在该类中,我有一个方法可以对单独的 DB2 存储过程进行 4 次单独调用,如下所示(伪):
@Override
public void createInteractionHistory(String userId, String userChannel,
CreateInteractionHistoryRequestPayload requestPayload) {
dao.createInteractionHistory(userId, userChannel, viewableBy,
interactCode, systemCreationDateTime, partyGrpId,
interactionHistoryController);
dao.createInteractionHistoryDetails(userId, interactonDescription, interactionHistoryController);
dao.createInteractionHistoryDetailsLink(userId, componentId, objectId, objectType, correspondanceType, direction, interactionHistoryController);
dao.createInteractionHistoryDetailsLink(userId, componentId, documentId, DOCUMENT, correspondenceType, direction, interactionHistoryController);
}
现在在最后的调用中,我通过传递一个太大的字段宽度来强制数据库中的异常,因此它根本无法调用 proc。这被捕获并转换为扩展 RuntimeException 的系统异常。
我在异常发生后调试了这段代码,它输入到 spring 框架中并且似乎正在回滚。
当我检查基础表时,我可以看到所有以前存储的过程都成功并且没有回滚,但最终调用没有成功。
这给我留下了不一致的数据和令人头疼的问题,因为我的理解是这些应该全部或全部处理提交/回滚。
我检查了存储的过程,数据库中没有提交。
这里有什么想法吗?