gpt4 book ai didi

playframework - 验证 : check for uniqueness before saving

转载 作者:行者123 更新时间:2023-12-04 03:35:27 24 4
gpt4 key购买 nike

我正在使用 Play Framework 开发一个网络应用程序。我的应用程序有一个 User 类,该类又具有一个用户名和一个电子邮件属性。很标准的东西。然而...

当新用户通过表单 (signup,html) 注册时,我想检查用户名和密码是否唯一,如果不是,则将它们重定向回表单并在那里显示一条消息。

我已经想到了一些解决方案,没有一个特别优雅,在我看来,必须有一种简单的方法来检查用户名/电子邮件在数据库中是否唯一,而不会对表本身施加约束(这会导致运行时错误)当插入重复值时)。

所以......有人遇到过同样的问题吗?你是怎么解决的?

最佳答案

我在调度系统中做了类似的事情,以防止同一个人的轮类重叠。在模型中它使用 @PrePersist方法来查询数据库并在发现任何冲突时抛出自定义异常。

然后在 Controller 中我捕获异常(将在保存对象时抛出)并重定向回表单。

在模型中:

@PrePersist
public void prepareToInsert() {
List<AgentShift> conflicts = find("agent=?1 and (start_time between ?2 and ?3 or end_time between ?2 and ?3)",
agent,
sql_datetime_formatter.print(scheduled.getStart()),
sql_datetime_formatter.print(scheduled.getEnd())).fetch();
if (!conflicts.isEmpty()) {
throw new SchedulingException("New shift for " + agent +
" overlaps existing shift which goes from " +
sql_datetime_formatter.print(conflicts.get(0).scheduled.getStart()) + " to " +
sql_datetime_formatter.print(conflicts.get(0).scheduled.getEnd()), conflicts);
}

}

在 Controller 中:
public static void create(@Valid AgentShift object) {
...
try {
object._save();
...
}
catch (SchedulingException e) {
flash.error("conflict with existing shift", e.getConflicts());
redirect(request.controller + ".blank", object._key());
}
}

关于playframework - 验证 : check for uniqueness before saving,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7358336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com