0

Java EE アプリケーションの 1 つで、登録ページを使用して新しいユーザーを登録しました。登録するとすぐに、登録された値が Oracle データベースに挿入されます。しかし、重複した値を検出する方法はありません。uniqueそこで、いくつかの列の値に制約を追加することを考えました。しかし、後で知ったのですが、複数の列をとして宣言することはできませんunique(私の場合、すでに主キーuseridとして宣言しています)。しかし、複数の列の値を一意にする必要があります(フィールドなど)。ユーザーが重複した値を持つフォームを送信した場合、例外がキャッチされ、空白のページにリダイレクトされるため、ユーザーは理解できなくなります。emialidunique. だから私は2つの質問があります。

1) 重複する値の挿入についてユーザーに通知するにはどうすればよいですか?

2) Oracle で複数の列を一意にするにはどうすればよいですか?

NB私はjavascriptを知りません!!

4

2 に答える 2

3

まず、1 つのテーブルに対して複数の一意の制約を宣言できます。useridそれが主キーであると宣言してから、一意であると宣言できますemailid。一意の制約はいくつでも宣言できます。

第 2 に、アプリケーションは重複キーの制約をキャッチし、それを使って何か役に立つことを行う必要があります。ユーザーを空白のページにリダイレクトすることは役に立ちません。アプリケーションは制約の例外をキャッチし、有用なメッセージをユーザーに表示する必要があります。たとえば、制約UK_EMAILIDに違反したことを示す例外が発生した場合、おそらく、「この電子メール アドレスは既に存在します」という内容のエラー メッセージをユーザーに表示する必要があります。

于 2012-08-01T16:38:42.547 に答える
0

JPA を使用している場合は、一意の制約を作成できます。

@Entity
@Table(name = "entity_table_name", uniqueConstraints={
   @UniqueConstraint(columnNames={"uniqueField1"}), // Unique value on one field.
   @UniqueConstraint(columnNames={"uniqueField2", "uniqueField3"}) // Unique combination.
})
public class YourEntity {
  private Long id;
  private String uniqueField1;
  private String uniqueField2;
  private String uniqueField3;
  private String uniqueField4;

// ...
}

実装 (休止状態、eclipseLink) がオラクルの部分を処理します。

于 2012-08-01T16:36:20.220 に答える