捕获休眠/JPA/会话唯一键重复异常的最佳实践



不确定我的标题是否足够明确。 这就是我的意思。我正在使用spring 3.0.5 + hibernate 3.6.1.RELEASE开发一个 Web 应用程序,并使用 sessionFactory JPA annotation.该应用程序允许用户使用usernameemailpassword进行注册。

用户可以使用(username or email)password登录。我试图找到一种可靠的方法来判断有一个独特的禁忌异常,表示为

java.sql.BatchUpdateException: Duplicate entry 'myusername' for key 'USERNAME'org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update

如果我能得到一个特定的例外,我可以通知用户他的用户名或电子邮件已经被占用。

我想到的是先做一个选择来检查,但这对我来说听起来不对。还有其他解决方案吗?最佳实践是什么?

感谢您阅读本文

实际上,

最佳做法是在创建新用户时检查具有该用户名/电子邮件地址的用户是否已存在。如果它确实返回一些内容以指示失败,否则创建用户。

通常,不应依赖数据库约束来强制实施业务规则。

我认为可以

进行选择检查。

通常,如果要创建唯一 ID,它们应该是唯一的,因此唯一性冲突是一种异常错误情况,应通过捕获异常来处理。

但在这里,你让用户提供希望唯一的密钥。您只是不能假设这些真的是非唯一的。因此,在尝试创建用户对象之前,您应该检查是否使用了用户名。

最新更新