如何阻止用户输入重复值

时间:2012-08-01 16:30:30

标签: oracle java-ee duplicates

在我的一个Java EE应用程序中,我使用注册页面注册新用户,一旦注册,他/她的注册值将被插入到Oracle数据库中。但是没有办法检测重复值。所以我考虑将unique约束添加到某些列值。但后来我了解到,我不能将多个列声明为unique(在我的情况下,我已将userid声明为主键)。但我需要创建多个列值 unique (如emialid字段)。再次,只有添加unique无法帮助,就好像用户提交带有重复值的表单一样,将捕获异常并且用户将无法理解,因为他将被重定向到空白页。所以我有两个问题。

  

1)如何通知用户插入重复值?

  

2)如何在Oracle中创建多个唯一列?

N.B。我不知道javascript !!

2 个答案:

答案 0 :(得分:3)

首先,您当然可以在表上声明多个唯一约束。您可以声明userid是主键,然后将emailid声明为唯一。您可以根据需要声明任意数量的唯一约束。

其次,您的应用程序需要捕获重复键约束并对其执行一些有用的操作。将用户重定向到空白页面没有用处 - 您的应用程序应该捕获约束异常并向用户显示有用的消息。例如,如果您收到一条说明违反约束UK_EMAILID的异常,您可能希望向用户显示一条错误消息,说明“此电子邮件地址已存在”。

答案 1 :(得分: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;

// ...
}

实现(hibernate,eclipseLink)将处理oracle部分。