我想插入唯一的电子邮件,并希望以类似电子邮件已存在的形式显示一条消息。 当我保存新记录时,它应该返回一些响应,表明它已经存在于表中。
模型类
@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;
}
答案 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
}