早上好,
我正在创建一个新用户,它的电子邮件必须唯一。我已经在User实体中声明了它。
我想知道在数据库中创建用户时捕获DataIntegrityViolationException更好(更快/最佳实践),或者最好是检查用户是否存在:从User u中选择count(*),其中u .email =?例如。
我正在使用MySQL和JPA在SpringBoot中工作。
非常感谢!
在这种情况下,性能差异可能很小。
这里更重要的是通过阅读代码了解发生了什么。您应该在服务层中有一些代码,在实际尝试进入数据库之前,检查是否违反了所定义的每个规则。对于新来的人(甚至对您而言,数周之内),IT部门将更容易清晰地了解测试的内容和方式。然后,该部分代码应使用专用代码引发异常(例如,让您获取由业务分析师定义的业务规则的ID),并且在属性中,您应该具有与该规则相对应的消息(消息键可以例如是规则的ID)。
此外,在此表中插入一行时,由于各种原因,您可能会获得DataIntegrityViolationException。因此,这毕竟不是一个持久的解决方案。