我有一个用户模型,它有一个由框架管理的Id,但也有一个电子邮件属性 我希望电子邮件是独一无二的,目前我正在使用
@Email
@Required
@Column(unique=true)
public String email;
这很好但是它抛出了PersistenceException。 Play框架是否有对此进行验证,以便在表单级别进行处理。 我想避免在我的user.save()
周围尝试catch块答案 0 :(得分:1)
唯一约束仅涉及数据库:如果它们是在表单级别定义的,则表单验证(“表面检查”)将需要查询数据库以验证您的对象。
我相信例外是你能找到的最好(或不那么糟糕)的解决方案。
为避免使用许多try / catch块,您可能只有一个“保存”入口点来完成这项工作。
答案 1 :(得分:0)
我有同样的IDENTICAL问题。我最后使用一种方法来检查该电子邮件是否已经存在,然后,如果是,则向表单添加错误。 像这样:
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
}
为我工作,希望有所帮助