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

标签 java playframework playframework-2.3

我从玩开始!框架 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/

相关文章:

java - 依赖注入(inject)在 Play Framework 2.4.x 的模型或测试中不起作用

scala - play 2.4 控制台无法按文档工作

heroku - 玩2.3.3 heroku部署报错

java - 使用 play/Ebean 将数据保存到数据库中的问题

java - 为什么对于某些值会出现错误,而对于其他值却不会?

java - 如何在 Java 小程序中将 GroupLayout 的内容居中

scala - 22 程序的列限制

java - 如何创建kafka压缩主题

javascript - 如何在 Django 中的第二个应用程序中检索第一个应用程序模型数据

playframework-2.3 - 迁移到 Play 2.3.8 后无法使用 Eclipse 调试我的 Activator/Play 应用程序