Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 除非提交表单,否则如何在数据库中锁定id_Java_Spring Mvc_Oracle11g - Fatal编程技术网

Java 除非提交表单,否则如何在数据库中锁定id

Java 除非提交表单,否则如何在数据库中锁定id,java,spring-mvc,oracle11g,Java,Spring Mvc,Oracle11g,我有一个表单,它显示了一个唯一的id,在该id下将提交表单。 唯一id是DB+1中的最后一个唯一id 现在,当表单在DB中提交时,它实际上不会直接在DB中插入唯一的id。 然后动态检查db的最后一个唯一id,然后插入最后一个id+1 因此,经常会出现这样的情况,即用户所看到的表单id(该唯一id),表单可能不会在该唯一id下提交,因为如果其他人(user2)同时提交表单, 然后User1的表单将以唯一id+2值提交 我的问题是,如何在从用户打开表单到提交表单的时间段内锁定id 如果你不清楚这个问

我有一个表单,它显示了一个唯一的id,在该id下将提交表单。 唯一id是DB+1中的最后一个唯一id

现在,当表单在DB中提交时,它实际上不会直接在DB中插入唯一的id。 然后动态检查db的最后一个唯一id,然后插入最后一个id+1

因此,经常会出现这样的情况,即用户所看到的表单id(该唯一id),表单可能不会在该唯一id下提交,因为如果其他人(user2)同时提交表单, 然后User1的表单将以唯一id+2值提交

我的问题是,如何在从用户打开表单到提交表单的时间段内锁定id

如果你不清楚这个问题,请告诉我。 但对于大型业务应用程序来说,这是一件非常棘手和重要的事情。请告诉我

我有两种选择

  • 在插入之后而不是之前显示ID。如果用户取消怎么办?你会浪费很多ID。好的,有很多,但我可以想象DoS攻击会是什么样子
  • 如果您需要该ID为用户提供一个参考ID,以便日后与支持部门或类似部门联系,只需从技术主键创建一个不同的ID appart即可。可以在插入之前计算此ID,并且还可以为您节省麻烦,因为技术ID可能会在迁移场景中发生更改

    • 锁定不是一个好主意,尤其是对于大型业务应用程序。所有其他并发请求(人员)都必须等待当前用户提交表单。用户将经历较长的响应时间,应用服务器资源将饱和,即使负载非常小,应用程序也会崩溃

      一种更可取的方法是,仅在提交表单后通知用户id。这对他们事先来说可能不是有用的信息

      无论如何,锁的具体实现取决于您的数据库,但类似于: 开始交易 从foo中选择max(id) [增量id] [等待用户提交] 插入到foo值中(新的\u id) 承诺


      但同样,您应该避免采用这种方法

      谢谢您的回复。但是考虑它……在提交之前显示唯一ID确实非常重要。如果用户取消,id将丢失,这不是一个大问题。但是怎么办。。要在整个期间锁定该id?@stefan感谢您的回复。但我想你没有回答这个问题。