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