在play框架2中定义唯一约束

时间:2013-03-12 13:34:32

标签: jpa playframework-2.0

我有一个用户模型,它有一个由框架管理的Id,但也有一个电子邮件属性 我希望电子邮件是独一无二的,目前我正在使用

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

这很好但是它抛出了PersistenceException。 Play框架是否有对此进行验证,以便在表单级别进行处理。 我想避免在我的user.save()

周围尝试catch块

2 个答案:

答案 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
}

为我工作,希望有所帮助

相关问题