2011-04-02 16 views
4

私は休止状態と、これは私の方法のほとんどのようになります使用しています:休止状態で例外を処理するには?

public boolean insertUser(User user) { 
    Session session = HibernateUtil.getSessionFactory().openSession(); 
    try { 
     session.beginTransaction(); 
     session.save(user); 
     session.getTransaction().commit(); 
    } catch (HibernateException he) { 
     session.getTransaction().rollback(); 
     return false; 
    } finally { 
     if (session != null) { 
      session.close(); 
     } 
    } 

    return true; 
} 

しかし、私は例えば、利用者へのより良いメッセージを与えるためのより良い方法で例外を処理したいと思います:ときに私私のテーブルに重複キーがあるなど

あなたがお勧めするものは?

お礼、 ヴァーター・アンリケ。

答えて

2
  • 例外を飲み込まないでください。あなたのコードでは、例外が何であるか決して分かりません。だから、それを/ラッパーでやり直す。

  • Filter、または404エラーページ(およびweb.xmlで設定)のWebレイヤーの汎用例外ハンドラを作成します。また、例外に関係なく、ユーザーに同じメッセージを表示します。ユーザーは、列が見つからないか間違ったデータ型であるかどうかは気にしません。あなたに申し訳ありませんが、あなたが調査しているという素晴らしいメッセージを与えてください。

  • また、春に提供されるような宣言的トランザクション処理を考慮してください。

1

trueまたはfalseを返す代わりに、あなた自身のビジネス例外(おそらくあなたの問題に合ったRuntimeExceptionを超える階層)をスローすることができます。

正確な問題がどのように検出されたかは別の問題です。 SQLExceptionに応じて、適切な(ビジネスに固有の)例外がスローされる独自の例外トランスレータを公開することができます。

この特定のメソッドの場合は、データベースにキーの存在を最初に問い合わせ、UserAlreadyExistsException(または何か)をスローする方が良いでしょう。