0

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

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

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

注意我不知道javascript!

4

2 回答 2

3

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

其次,您的应用程序需要捕获重复键约束并对其进行一些有用的操作。将用户重定向到空白页面没有用——您的应用程序应该捕获约束异常并向用户显示有用的消息。例如,如果您收到一个说明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;

// ...
}

实现(hibernate、eclipseLink)将负责 oracle 部分。

于 2012-08-01T16:36:20.220 回答