【问题标题】:How to insert unique email into database如何将唯一的电子邮件插入数据库
【发布时间】:2018-10-11 08:02:24
【问题描述】:

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

模型类

@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;
}

【问题讨论】:

  • 在您的服务类中,如果已经存在具有相同电子邮件地址的用户,则只需抛出某种RuntimeException。使用 Spring 异常处理程序将异常映射到自定义错误表示,您可以在客户端中使用它。对错误请求使用响应代码 400。

标签: java hibernate spring-mvc jsp


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果你使用的是 hibernate 或 jpa,你可以像下面这样使用。 unique=true 确保电子邮件列的值是唯一的。

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

    否则你必须添加一个方法来检查这个

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

    【讨论】:

    • 谢谢,但我收到错误重复的电子邮件密钥 **** 等,我想在同一页面上重定向一些 msg like - 电子邮件已在使用中
    猜你喜欢
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 2016-05-23
    • 1970-01-01
    相关资源
    最近更新 更多