这是通过 Web 应用程序/Web 服务注册会员的用例。我们有一个复杂的算法来检查成员是否重复,方法是查看电话、地址等多个表格。该算法因会员所在国家/地区而异。所以这个限制不能使用主键/唯一键约束来实现。
所以我们在 Java 代码中进行了检查。但是,如果有 2 个重复的并发请求,则 2 个 Java 线程会看到该成员不存在,并且它们都插入了导致重复的记录。如何防止此类重复插入?
我可以通过使用行级锁或 Hibernate 的乐观并发来防止更新。我可以考虑使用表级锁来防止此类插入,但会限制应用程序性能,因为它也会阻止更新。我认为另一种选择是创建一个带有 id='memberInsert' 的记录的锁表,并通过 JDBC 强制所有插入以获取该记录的行级锁。
谢谢 Suneel