2

if/else ブロックに基づく一連の挿入/更新に Spring simplejdbctemplate を使用しています。

これらすべての操作を 1 つのトランザクションに結合する方法があるかどうか疑問に思っています。現在、私のコードが(何らかの理由で)壊れた場合、特定の挿入が実行され、特定の挿入は実行されません。何かが失敗した場合、すべてが失敗することを望みます。SQL のロールバックのように。

これは simplejdbctemplate で可能ですか?

どこに配置できるかがわからないため、リンクはあまり役に立ちません@Transaction。以下のコードを貼り付けています。@Transaction注釈は以下のコードのどこに行きますか?

アップデート

コード:

for (Colors c : colors) {
        if (isColorExistsInOtherDb(c)) {
            if (!isColorExistsAlready(c)) {
                insertIntoColor(c);
                colorId = getMaxColorId();
            }
        else {
            updateColor(c);
            colorId = getColorIdByShade(c);
        }


        for (Shade s : c.getShades()) {
            colorId = colorService.isShadeExistsForColor(colorId, s.getShadeId());
            if (colorId <= 0) {
                colorService.insertIntoColor(s);
                colorId = colorService.getMaxColorId();
            }
            else {
                colorService.updateColor(colorId, c);
            }


                insertMachinePoam(machineId, poamId);
            }
        }
        else {
            //do something else?
        }
4

2 に答える 2

2

Simple Jdbc Template は、トランザクション中かどうかを制御しません。このページでは、アノテーションを使用してトランザクション設定を制御する例を示します。

一般に、サービス タイプ メソッドから複数の DAO/jdbc テンプレート呼び出しを行っています。このメソッドにはトランザクションのアノテーションが付けられるため、jdbc テンプレート コードは、その設計目的であるデータベースへのアクセスに集中できます。

于 2012-10-14T23:29:39.813 に答える
0

確かに、Spring 宣言型トランザクションを使用する必要があります。これはアスペクトであり、単純な JDBC テンプレートの一部ではありません。

于 2012-10-14T23:29:58.770 に答える