保存实体时避免重复键错误

时间:2015-12-04 14:26:17

标签: java playframework playframework-2.3

我从Play开始!框架2和我在尝试将实体保存到数据库时遇到问题(Postgres)。

我已创建了一个模型,其中@Column(unique = true)属性上有name注释。因此,保存时必须有两个唯一属性:始终正确生成的ID和名称,即用户提供的输入。

当我检查Controller(filledForm.hasErrors())中的错误时,没有错误,因为(我猜)它不会检查重复的属性,而只是检查表单错误。

然后它转到模型并尝试保存对象thebean.save();。然后它就崩溃了#34;并在浏览器中显示错误。

我的问题是:由于save()方法返回void,如何捕获此错误并知道它是什么类型的错误(警告用户)?

由于

1 个答案:

答案 0 :(得分:1)

替代解决方案是手动检查约束。 有一个名为validate()的实体方法(在模型中)。在表单验证时自动调用它。 所以:

public List<ValidationError> validate() {
    List<ValidationError> errors = new ArrayList<>();

    if(YouModel.find.where().eq("name", name).ne("entity_id", entity_id).findRowCount() != 0){
        errors.add(new ValidationError("name", "error.yourModel.name.unique"));
        return errors;
    }

    return null;
}

error.yourModel.name.unique是来自/ conf / messages文件的自定义常量。你应该创建它。