Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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/date/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 hibernate无法在数据库中按顺序保存对象_Java_Multithreading_Hibernate - Fatal编程技术网

Java hibernate无法在数据库中按顺序保存对象

Java hibernate无法在数据库中按顺序保存对象,java,multithreading,hibernate,Java,Multithreading,Hibernate,有3个用户登录到一个应用程序中,比如a、B、C。我已经实现了一个业务逻辑,如果用户a将对象(使用hibernate)保存在DB(比如Employee对象)中,它将在Employee表中标记为“重复”处理状态(每个记录都有一个处理状态,如成功、错误、重复)。我将employee对象持久化所在的代码块放在同步块中。但我的问题是“当所有3个用户同时单击SaveEmployee按钮时,3个对象保存在DB中,同步块中的代码为所有3个用户串行执行,但它同时将对象保存在DB中,因为我无法将记录标记为重复(在保

有3个用户登录到一个应用程序中,比如a、B、C。我已经实现了一个业务逻辑,如果用户a将对象(使用hibernate)保存在DB(比如Employee对象)中,它将在Employee表中标记为“重复”处理状态(每个记录都有一个处理状态,如成功、错误、重复)。我将employee对象持久化所在的代码块放在同步块中。但我的问题是“当所有3个用户同时单击SaveEmployee按钮时,3个对象保存在DB中,同步块中的代码为所有3个用户串行执行,但它同时将对象保存在DB中,因为我无法将记录标记为重复(在保存对象之前,我检查了处理状态)”。我想一个一个地保存对象如果所有3个都同时单击SaveEmployee按钮,则在同步块中首先进入的线程应首先保存Employee对象,以便我可以将记录标记为重复给其他线程

我已经实现了如下代码

synchronized(this){
   find processing state of each records.
   if record is have success status mark as duplicate
   else save the object in DB with status proccesing (by using hibernate)
   save function is {
            session().save(object) (hibernate session )
            session().flush();
      }
   // do some other work 

  update the records status success
}// close the synchronized block 
如果第一个用户成功保存记录。但我无法获得记录状态“其他用途成功”

请帮忙


谢谢

保存对象后,您正在将状态设置为“成功”。因此,中的状态不会持久化


您需要在对象上设置状态“Success”,然后保存它。

您是在同步块内提交事务还是在同步块外提交?在同步块内提交事务,然后在块外更新相同的记录。