我从玩开始!框架 2,我在尝试将实体保存到数据库 (Postgres) 时遇到问题。
我创建了一个模型,其中 name
属性上有一个 @Column(unique = true)
注释。因此,保存时必须有两个唯一的属性:ID(始终正确生成)和名称(由用户提供的输入)。
当我检查 Controller 中的错误(filledForm.hasErrors()
)时,没有错误,因为(我猜)它不会检查重复的属性,而只是检查表单错误。
然后它转到模型并尝试保存对象thebean.save();
。然后它“崩溃”并在浏览器中显示错误。
我的问题是:由于 save()
方法返回 void,我如何捕获此错误并知道它是什么类型的错误(以警告用户)?
谢谢
最佳答案
替代解决方案是手动检查约束。 有一个名为 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 文件中的自定义常量。您应该创建它。
关于java - 保存实体时避免重复键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34090530/