私のクラスは次のように定義されています
@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 フレームワークにフィードされ、ロールバックしているように見えます。
基になるテーブルを確認すると、以前のすべてのストアド プロシージャが成功し、ロールバックされていないことがわかりますが、最後の呼び出しは成功しませんでした。
これにより、一貫性のないデータと頭痛が残ります。私の理解では、これらはコミット/ロールバックをすべてまたはまったく処理する必要があるということです。
ストアド プロシージャを確認しましたが、データベースでコミットが行われていません。
ここに何かアイデアはありますか?