捕获Hibernate / JPA / Session唯一键重复异常的最佳实践

时间:2012-05-27 12:34:03

标签: java hibernate exception-handling

我不确定我的标题是否足够明确。这就是我的意思。我正在使用spring 3.0.5 + hibernate 3.6.1.RELEASE使用JPA annotation使用sessionFactory开发一个Web应用程序。该应用程序允许用户使用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

如果我可以获得特定的例外情况,我可以通知用户他的用户名或电子邮件已被删除。

我想到的是在检查前做一个选择,但那对我来说听起来不对。还有其他解决办法吗?什么是最佳做法?

感谢您阅读本文

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

我认为选择要检查是可以的。

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

但是,在这里,您要让用户提供有希望的唯一密钥。你不能认为这些确实是非独特的。因此,您应该在尝试创建用户对象之前检查是否已使用用户名。