如何将唯一的电子邮件插入数据库

时间:2018-10-11 08:02:25

标签: java hibernate spring-mvc jsp

我想插入唯一的电子邮件,并希望以类似电子邮件已存在的形式显示一条消息。 当我保存新记录时,它应该返回一些响应,表明它已经存在于表中。

模型类

@PostMapping("/user")
public ModelAndView processRegistrationForm(@ModelAttribute("user") @Valid Users user, BindingResult result) {
    if (result.hasErrors()) {
        return new ModelAndView(landingPage);
    } else {
        try {
            userService.saveUser(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ModelAndView("redirect:/user");
    }
}

JSP页面

<form:form action="${registerUrl}" modelAttribute="user" method="post">
    <div class="form-group">
        ...
        <c:if test="${user.userId eq null}">
            <input class="btn btn-success" type="submit" value="Register">
        </c:if>
    </div>
</form:form>

实体类

public class Users {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "users_generator")
    @SequenceGenerator(name="users_generator", sequenceName = "SEQ_USERS", allocationSize=1)


    @Column(name="USER_ID")
    private Integer userId;

    @Column(name="LOGIN_NAME")
    private String loginName;

    @NotEmpty
    @Email
    @Column(name="MAIL_ID", unique=true)
    private String mailId;

    @NotEmpty
    @Column(name="FIRST_NAME")
    private String firstName;
}

2 个答案:

答案 0 :(得分:0)

在数据库的列上添加唯一键约束。如果您使用的是休眠模式,则当您尝试插入重复的电子邮件时,它将抛出 ConstraintViolation 异常,而在更新时,它将抛出 DataIntegerityViolationException

只需捕获这些异常并返回错误消息即可。

答案 1 :(得分:0)

如果您使用的是hibernate或jpa,则可以按以下方式使用。 unique = true,确保电子邮件列的值是唯一的。

@Column(name = "email", unique=true)
private String email;

否则,您必须添加一种方法进行检查

if(userService.findUserByEmail() != null) {
 // User already exists
}