2

我有一个用户模型,它有一个由框架管理的 ID,还有一个电子邮件属性,我希望电子邮件是唯一的,目前我正在使用

@Email
@Required
@Column(unique=true)
public String email;

这工作正常,但它抛出一个 PersistenceException。播放框架是否对此进行了验证,以便在表单级别进行处理。我想避免在我的 user.save() 周围尝试捕获块

4

2 回答 2

1

唯一约束仅指数据库:如果它们是在表单级别定义的,则表单验证(“表面检查”)将需要查询数据库以验证您的对象。

我相信例外是您能找到的最好(或不太糟糕)的解决方案。

为了避免许多 try/catch 块,您可能有一个“保存”入口点来完成这项工作。

于 2013-03-13T15:53:56.143 回答
0

我有同样的相同问题。最后我使用了一种方法来检查该电子邮件是否已经存在,如果存在,则在表单中添加一个错误。像这样的东西:

Form<EntityClass> yourForm = Form.form(EntityClass.class).bindFromRequest();
if (EntityClass.mailAlreadylExist(yourForm.data.get("email"))){
List<ValidationError> validationErrorList = new ArrayList<>();
validationErrorList.add(new ValidationError("" , "email already used"  ,new ArrayList<>()));
yourForm.errors().put("", validationErrorList);
}
if (yourForm.hasErrors(){
return badRequest(yourView.render(yourForm));
} else {
//Do your stuff here, no PersistenceException will be thrown due to duplicate email
}

为我工作,希望它有帮助

于 2014-08-11T15:12:09.903 回答