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