3

私はSpring ROOを使用しています。私の Web アプリケーションでは、多くのユーザーを作成して保存できます。既存のユーザーも更新できます。

更新シナリオでは、merge() メソッドを使用して既存のデータを更新します。データベースでは、列「ユーザー名」は一意です。次にシナリオです。

  1. ユーザーは、携帯電話番号「6039274849」でユーザー名「Sean」を作成します

  2. ユーザーは、携帯電話番号「8094563454」で「パーカー」という名前の別のユーザーを作成します

  3. ユーザーが 2 番目のユーザー「Parker」を「Sean」で更新しようとすると、例外が発生します。

スタックトレースで、次の例外が原因であることがわかりました

  1. ConstraintviolationException が原因
  2. SQLException が原因
  3. TransactionSystemException が原因
  4. PersistenceException が原因
  5. TransactionRollbackException が原因

私は次のことを試しました

public String merge()
  {
     try{
          //code to merge
        }
     catch(????? e){
         throw e;
     }
  }

上記の5つの例外を「????」に追加してみました . でもまだ釣れませんでした。

「????」に追加する必要がある例外を誰か教えてください。上記のリストから例外をキャッチするには?

PS: Spring ROO を使用しています。だから私は .aj ファイルのコードを変更しています。この質問を重複として閉じないでください。この質問を閉じる前に、私の問題について誰かからの回答を期待しています。

4

4 に答える 4

2

最後の手段として、あなたはただ万能を捕まえることができますexception

public String merge()
{
     try{
          //code to merge
        }
     catch(Exception e){
         //handle e here.
     }
}
于 2012-07-19T02:37:56.953 に答える
1

私は最近同じ問題を抱えていました。独自の例外クラスのスプリング ラップ例外のようです。
私はこの問題を次のように解決しました:

try {
   ...
}
catch(Exception e){
  System.out.println(e.getClass().getName());
}

これにより、どの例外が実際にスローされたかがわかります。

于 2012-07-26T07:21:46.373 に答える
1

疑わしい場合は、Throwable をキャッチして、ブレーク ポイントを追加するか、ログアウトして、それが何であるかを正確に確認します。次に、コードを適切に変更します。

于 2012-07-19T02:47:58.330 に答える
1

ええと、キャッチで例外を再スローしていませんか? これは、トレースの「最新」の例外である必要があるため、ConstraintValidationException.

通常、Spring/Hibernate アプリでは、コードから例外が発生すると、トランザクションがロールバックされることに注意してください。例外をキャッチすると、おそらくそれを防ぐことができ、データの不整合につながる可能性があります。

于 2012-07-19T02:33:47.277 に答える