1

私のタイトルが十分に明確であるかどうかはわかりません。これが私の意味です。を使用spring 3.0.5 + hibernate 3.6.1.RELEASE してWebアプリケーションを開発しています。このアプリケーションを使用すると、ユーザーは、、およびを使用してサインアップできます。JPA annotationsessionFactoryusernameemailpassword

ユーザーはとを使用してログインでき(username or email)ますpassword。私は、次のように表現された固有の制約例外があることを伝える信頼できる方法を見つけようとしています。

java.sql.BatchUpdateException: Duplicate entry 'myusername' for key 'USERNAME'またorg.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update

特定の例外が発生した場合は、ユーザー名または電子メールがすでに使用されていることをユーザーに通知できます。

私の頭に浮かぶのは、チェックする前に選択を行うことですが、それは私には正しく聞こえません。他の解決策はありますか?ベストプラクティスは何ですか?

これを読んでくれてありがとう

4

2 に答える 2

7

実際のベストプラクティスは、新しいユーザーを作成するときに、そのユーザー名/電子メールアドレスを持つユーザーがすでに存在するかどうかを確認することです。その後、失敗を示す何かを返す場合は、それ以外の場合はユーザーを作成します。

一般に、ビジネスルールを適用するためにデータベースの制約に依存するべきではありません。

于 2012-05-27T12:43:45.330 に答える
3

選択して確認しても大丈夫だと思います。

一般に、一意のIDを作成する場合、それらは一意である必要があるため、一意性違反は例外的なエラー条件であり、例外をキャッチすることで処理する必要があります。

しかし、ここでは、ユーザーがうまくいけば一意のキーを提供できるようにします。これらが本当にユニークではないとは限りません。したがって、ユーザーオブジェクトを作成する前に、ユーザー名が使用されているかどうかを確認する必要があります。

于 2012-05-27T12:41:35.313 に答える