Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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
EJB/JPA中的并发事务管理_Jpa_Ejb - Fatal编程技术网

EJB/JPA中的并发事务管理

EJB/JPA中的并发事务管理,jpa,ejb,Jpa,Ejb,我正在EJB3.0上工作,在EJB3.0中,实体bean由JPA管理。我的问题是,如果两个或多个用户同时尝试使用相同的表单插入同一个表,JPA将如何处理这种情况。它将通过使用数据库事务很好地管理它。如果两个线程试图同时创建同一行(即使用相同的主键),其中一个将成功,另一个将从数据库中获取异常,这将导致其事务回滚。这意味着在同一事务中进行的所有其他插入、更新和删除也将被回滚,或者如果愿意,将被取消,从而使数据库保持一致状态。这是我最喜欢的 如果两个线程在同一个表中同时插入两个不同的行,那么数据库将

我正在EJB3.0上工作,在EJB3.0中,实体bean由JPA管理。我的问题是,如果两个或多个用户同时尝试使用相同的表单插入同一个表,JPA将如何处理这种情况。

它将通过使用数据库事务很好地管理它。如果两个线程试图同时创建同一行(即使用相同的主键),其中一个将成功,另一个将从数据库中获取异常,这将导致其事务回滚。这意味着在同一事务中进行的所有其他插入、更新和删除也将被回滚,或者如果愿意,将被取消,从而使数据库保持一致状态。这是我最喜欢的


如果两个线程在同一个表中同时插入两个不同的行,那么数据库将很好地处理这一问题,并且两行都将被插入

表的主键是什么?主键是由序列或复合业务键自动生成的还是什么?如果密钥是自动生成的,并发插入通常不需要JPA执行任何特殊操作。主键是oracle的序列。但我好奇的是,如果它不是自动生成的,而是作为主键的单个varchar列,JPA将如何管理,或者它将如何管理序列。“怎么做”?好吧,我明白你的意思。每当一个新实体变得持久时,序列预分配器将预生成密钥并将其分配给您的实体。序列如何工作的细节与您的问题无关。若键是单个varchar列,则底层DB将保证不会有具有相同键的重复项@JB Nizet已经解释过,这是ACID的一部分,而且ACID由底层DB而不是JPA保证。