質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.20%

JavaとJavaScriptで論理削除が何かへん!!

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,185

kurikara

score 7

前提・実現したいこと

JavaとJavaScriptで論理削除をやっている時にちょっと動作が今一分からなくなりました。教えて頂けると幸いです。

発生している問題・エラーメッセージ

パラメータを渡して、論理削除を行っているのですが、↓のソースの

// トランザクションの取得
TransactionManager tm = AppConfig\.singleton\(\)\.getTransactionManager\(\);

vResult =  tm\.required\(\(\) -> {

↑の部分で次のtry-catch文を通らずに下まで行ってしまい、エラーが返ってくるのですが、エラーがあっても、論理削除は行われていて、困っています何かおかしい部分があるでしょうか。

該当のソースコード

    /\*\*
     \* 論理削除
     \*/
    @POST
    @Path\("/PC005/delete"\)
    @Consumes\(MediaType\.APPLICATION_JSON\)
    @Produces\(MediaType\.APPLICATION_JSON\)
    public int execute1\(LinkedHashMap<String, Object> data\){
        //初期化
        int vResult = -99;

        //引数よりデータ取得
        List<LinkedHashMap<String,Object>> delInfo = Utility\.autoCast\(data\.get\("inputData"\)\);

        //TODO:パラメータの中に'inputData'が存在しない場合はエラー
        if \(delInfo == null\){
            vResult = -98;
        }

        // トランザクションの取得
        TransactionManager tm = AppConfig\.singleton\(\)\.getTransactionManager\(\);

        vResult =  tm\.required\(\(\) -> {
            try{
                LinkedHashMap<String,Object> info = delInfo\.get\(0\);
//                LinkedHashMap<String,Object> info = Utility\.autoCast\(delInfo\.get\(0\)\)

                String term = \(String\)info\.get\("term"\);
                String pgmId = \(String\)info\.get\("pgmId"\);
                String eigyoCd = \(String\)info\.get\("eigyoCd"\) ;
                String workKbn = \(String\)info\.get\("workKbn"\) ;
                int updateCount = \(Integer\)info\.get\("updateCount"\) ;

                MWorkKbnDao daoMWorkKbn = new MWorkKbnDaoImpl\(\);
                //MWorkerInfoデータ存在チェック
                MWorkKbn MWorkKbnDto= daoMWorkKbn\.selectById\(eigyoCd , workKbn \);
                if\(MWorkKbnDto == null\){
                    //更新対象存在なしのためエラー
                    tm\.setRollbackOnly\(\);
                    return -5;
                }

                //MWorkerSkillにあるデータがあるか否か。
                MWorkerSkillDao daoMWorkerSkill = new MWorkerSkillDaoImpl\(\) ;
                MWorkerSkill MWorkerSkillDto = daoMWorkerSkill\.selectWorkerSkillMWorkKbn\(eigyoCd , workKbn\) ;
                if\( MWorkerSkillDto != null\){
                    //存在しているから論理削除中止。
                    tm\.setRollbackOnly\(\);
                    return -3 ;
                }

                //更新回数チェック(データ存在チェック込)
                if\(MWorkKbnDto\.getUpdateCount\(\) != updateCount\){
                    //更新回数が異なる(他プロセスですでに更新されている)ため、エラー
                    tm\.setRollbackOnly\(\);
                    return -6;
                }

                //削除
                setDelteContentsInfo\(MWorkKbnDto,info,term,pgmId\);

                //MWorkerInfoの更新
                daoMWorkKbn\.deleteupdateMWorkKbn\(MWorkKbnDto\);

            }catch\(Exception e\){
                e\.getStackTrace\(\);
                tm\.setRollbackOnly\(\);
                return -99;
            }
            return 0;

        }\);
        return vResult;
    }

            var WorkKbn = new Object;

            WorkKbn\['eigyoCd'\] = eigyoCd
            WorkKbn\['workKbn'\] = workKbn ;
            WorkKbn\['workName'\] = workName ;
            WorkKbn\['updateCount'\] = updateCount ;

            var jsonData = new Object\(\);
            jsonData\['inputData'\] = new Array\(\);
            jsonData\['inputData'\]\.push\(WorkKbn\);

            \$\.ajax\({
                url: API_PATH \+ '/PC005/delete',
                type: 'POST',
                data: JSON\.stringify\(jsonData, null, ''\),
                contentType: 'application/JSON',
                dataType : 'JSON',
            }\)
            \.done\(saveDone\)
            \.fail\(saveFail\);


          /\*\*
          \* 保存成功
          \*
          \*/
            function saveDone\(result\){
                alert\(result\) ;
                switch\(result\){
                    case 0:
                        alert\("正常に論理削除完了しました\\n再表示します"\);
                        //再読み込み
                        location\.reload\(\) ;
                        break;
                    case 3:
                        alert\("論理削除対象データが別のマスタで登録されているデータです\\n論理削除を中止します"\);
                        //再読み込み
                        location\.reload\(\) ;
                        break;
                    case -6:
                        alert\("論理削除対象データがすでに別プロセスで更新されています"\);
                        break;
                    case -98:
                        alert\("パラメータエラー"\);
                        break;
                    case -99:
                        alert\("論理削除:保存に失敗しました"\);
                        break;

                }
            }

補足情報\(言語/FW/ツール等のバージョンなど\)

JavaとJavaScriptをEclipseで開発しています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2016/12/09 08:12

    フレームワークライブラリの情報

    キャンセル

  • A-pZ

    2016/12/09 10:53

    ブレークポイントを設定してデバッグモードを実行し、どこまで処理が進んでいるのか、本当にTransactionManager中の処理に到達していないのかを確認してください。他にも「エラーが出ます」だとさすがに何のエラーなのかわかりませんので、可能であれば該当のエラーログを抜粋すると、より良い回答が得られるかもしれません。

    キャンセル

  • 退会済みユーザー

    2017/04/14 07:15

    複数のユーザーから「意図的に内容が抹消された質問」という意見がありました
    解決後に編集機能を用いて質問内容を改変し関係のない内容にしたり、内容を削除する行為は禁止しています。
    投稿していただいた質問は、後に他の誰かが困ったときに助けになる情報資産になると考えるからです。
    「質問を編集する」ボタンから編集を行い、他のユーザにも質問内容が見えるように修正してください。

回答 1

+1

まず、try-catchを通らないのであれば、ロールバック以前に、tm.required(() が、怪しいですが・・・。

あと、 更新対象の存在チェックや更新番号でエラーとしているところも、
これらのエラーであれば、daoからアップデートは投げてないので、ロールバックの必要性が怪しいです。

daoMWorkKbn.deleteupdateMWorkKbn(MWorkKbnDto);

なぜならば、この文までは、更新を実施されていませんよね。

そも、try-catchに入ってないのであれば、開示されているソースは通っていないのですから、
開示されているソース以外のところで更新していませんか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる