1

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

用户可以使用(username or email)和登录password。我正在尝试找到一种可靠的方法来判断存在一个独特的约束异常,表示为

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

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

我想到的是在检查之前进行选择,但这对我来说听起来不对。还有其他解决方案吗?最佳做法是什么?

感谢您阅读本文

4

2 回答 2

7

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

通常,您不应依赖数据库约束来执行业务规则。

于 2012-05-27T12:43:45.330 回答
3

我认为可以选择进行检查。

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

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

于 2012-05-27T12:41:35.313 回答