【问题标题】:Is it possible to configure the Play Framework's CRUD module to respect @Column(unique=true) annotations?是否可以配置 Play Framework 的 CRUD 模块以尊重 @Column(unique=true) 注释?
【发布时间】:2011-08-31 21:01:50
【问题描述】:

我正在使用 Play 的 CRUD 模块来创建一组简单的管理屏幕。我的模型之一是用户,我想对电子邮件字段强制执行唯一约束。

代码如下:

public class User extends Model {
    @Email
    @Required
    @Column(unique=true)
    public String email;

管理屏幕正确显示 - 当我尝试破坏唯一性时(通过保存已使用电子邮件的用户)我收到此错误(在浏览器中):

Execution exception
PersistenceException occured : org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update

In {module:crud}/app/controllers/CRUD.java (around line 100)

96:
             } catch (TemplateNotFoundException e) {

97:
                 render("CRUD/show.html", type, object);

98:
             }

99:
         }


100:
         <b>object._save();</b>

101:
         flash.success(Messages.get("crud.saved", type.modelName));

102:
         if (params.get("_save") != null) {

103:
             redirect(request.controller + ".list");

104:
         }

105:
         redirect(request.controller + ".show", object._key());

106:
     }

我可以对使用 CRUD 模块和列唯一性注释进行任何调整吗?

【问题讨论】:

    标签: hibernate frameworks playframework crud unique-constraint


    【解决方案1】:

    您可以创建自定义检查并添加到 User 类中的电子邮件属性中。

    公共类 UniqueCheck 扩展检查 { @覆盖 公共布尔isSatisfied(对象验证对象,对象值){ if (StringUtils.isBlank((String) value)) { 返回假; } return User.findByEmail((String) value)); } }

    然后

    公共类用户扩展模型{ @电子邮件 @必需的 @MaxSize(值 = 250) @CheckWith(value = UniqueEmail.class, message = "已使用此电子邮件找到现有帐户") 公共字符串电子邮件; }

    【讨论】:

    • 这个方法的一个问题是,当我编辑一个现有的记录并保存它时,它也会告诉我已经找到了帐户。如何让它只检查创建新项目而不是修改现有项目?
    • 检查 id 字段,如果为 null 则表明这是一条新记录。
    【解决方案2】:

    在我看来,系统正在按照您的预期进行。我唯一能想象的是修补 CRUD 模块以捕获此异常并变得更好,但通常唯一约束是数据库端约束,只能通过尝试写入数据库来检查。所以唯一约束不是验证注解(可以在写入数据库之前执行)。

    【讨论】:

    • 是的,同意约束按我的意愿工作。这是 CRUD 模块中的修补程序,因此我可以对我想知道的用户给出优雅的响应。也许这超出了简单 CRUD 工具的范围。
    猜你喜欢
    • 2013-07-30
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 2014-11-17
    相关资源
    最近更新 更多