@Column(unique=true)
我使用在将数据插入数据库之前检查重复值的最佳实践为用户名设置唯一约束?
- 通过捕获当您尝试插入具有相同用户名的数据时程序将抛出的异常。
- 在尝试插入之前检查数据库是否提供的用户名已经存在。
我认为解决方案 1(try-catch)很好。对于解决方案 2,如果您的数据库中有并发,您仍然需要异常处理。
这取决于您的设计。如果有问题的检查在性能上不重要或成本不高,那并不重要。与有时需要在我们知道可以完成操作之前完成的大量检查(取决于手头的问题)相比(通常无论如何都需要错误处理),从 DB 抽象层抛出的异常可以减少代码中的噪音.
还有另一个方面:独特的真的是你想要的吗(继续阅读)?如果您使用的是 MS SQL 服务器,它不支持 ANSI-nulls,即定义为唯一的列可能只包含一个空值。我怀疑用户名永远不会为空,但在其他一些唯一列上可能并非如此 - 在 MS SQL Server 上时,您需要应用唯一过滤索引(或此类)或事先在应用程序中进行检查。
我投票赞成抛出异常 + @eis 的建议:检查 UI 中的用户名可用性。
当这样的用户名数据输入到 UI 中时,立即检查用户名的重复项,假设这样的 UI 存在。例如,使用 javascript/XHR。
并在提交后重新检查,因为可以跳过 javascript 验证并且情况可能已经改变。
如果在这一切之后仍然存在重复的用户名(由于检查失败或有人同时插入它),这对我来说听起来像是一个例外情况,所以抓住一个例外。
所以简而言之,两个选项,第二个检查两次。