这是通过Web应用程序/ Web服务进行成员注册的用例。我们有一个复杂的算法,通过查看多个表格(如电话,地址等)来检查成员是否重复。算法根据成员的国家而不同。所以这个限制不能用主键/唯一键约束来实现。在Oracle中不使用唯一密钥的情况下防止重复插入
所以我们在Java代码中进行检查。但是,如果有2个重复的并发请求,则2个Java线程会看到该成员不存在,并且它们都插入导致重复的记录。我怎样才能防止这种重复插入?
我可以通过使用行级锁或Hibernate的乐观并发来防止更新。我可以考虑使用表级锁来防止这种插入,但限制了应用程序的性能,因为它也会阻止更新。我认为另一个选择是创建一个带有id ='memberInsert'记录的锁表,并通过JDBC强制所有插入操作以获得该记录的行级锁。
感谢 Suneel
您可以先确定该成员是否重复,然后根据该知识启动多个线程以完成多项任务。 – rid
这些请求可能来自Web浏览器,Web服务客户端。所以请求线程创建不在我的控制之下。 – Suneel
决赛桌不应该有独特的约束?我了解你必须检查多个来源的完整性的部分。 – r0ast3d