2017-12-13 40 views
0

いくつかのフィールドで一意の制約を持つ単純な登録があり、.jspページのフレンドリなメッセージで一意の例外を処理したいが、どの例外をキャッチブロックに含めるべきかわからない。私は重複したフィールドを持つユーザーを登録しようとすると私のコンソールに乗る:Hibernateユニーク制約例外キャッチ

Dec 13, 2017 12:35:10 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper 
logExceptions 
WARN: SQL Error: 1062, SQLState: 23000 
Dec 13, 2017 12:35:10 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper 
logExceptions 
ERROR: Duplicate entry 'admin1' for key 'username' 
Dec 13, 2017 12:43:37 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper 
logExceptions 


WARN: SQL Error: 1062, SQLState: 23000 
Dec 13, 2017 12:43:37 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper 
logExceptions 
ERROR: Duplicate entry 'edek' for key 'PRIMARY' 

取扱い:あなたがテーブル内の1つのプライマリキーを持っている場合は、例外ブロックでエラーコードを

try 
{ 
    userService.registerUser(userAccount); 
} 
catch(?) 
{ 
    // something like : 
    return new ModelAndView("register","uniqueErrorMessage",message); 
} 
+0

あなたは 'Exception'自体をキャッチしようとしましたか? – kakurala

+0

さて、それはうまくいきますが、明確なメッセージを表示するために、どのフィールドが一意の制約を破るかを区別したいと思います。また、一意の制約に接続されていない他のSQLExceptionが発生した場合、これは誤解を招きます。 –

答えて

0

検索することができます例外メッセージに1062(重複する行を挿入されたときにスロー1062コード)、ユーザが既に存在すること、関連するメッセージを返す..等

OR

挿入する前にselect count(*)...where username='user entered this'を実行することができます。結果カウント> = 1が表示された場合は、挿入中に例外を伴う を処理する代わりに関連するメッセージを返します。