| 
                    
                              1 
                        
                        
                                  -3
                             
                            
  | 
                
| 
                         | 
                    
                              2 
                        
                        
                                  19
                             
                            
 这不容易。 一个幼稚的方法是这样做(假设该方法在事务内部运行): 
  但在并发环境中,此代码可能由于某些竞争条件而失败: T1: BEGIN TX; T2: BEGIN TX; T1: SELECT w/ id = 123; //returns null T2: SELECT w/ id = 123; //returns null T1: INSERT w/ id = 123; T1: COMMIT; //row inserted T2: INSERT w/ name = 123; T2: COMMIT; //constraint violation 如果您运行的是多个JVM,那么同步不会有帮助。如果不获取一个表锁(这很可怕),我真的不知道你如何解决这个问题。 在这种情况下,我想知道是否最好先系统地插入并处理可能的异常以执行后续选择(在新事务中)。 您可能应该添加一些关于上述约束(多线程)的详细信息。分布式环境?).  | 
                
| 
                         | 
                    
                              3 
                        
                        
                                  4
                             
                            使用纯JPA可以用嵌套的实体管理器(实际上我们只需要嵌套事务,但我认为纯JPA不可能)在多线程解决方案中优化地解决这个问题。本质上,我们需要创建一个封装find或create操作的微事务。这个性能不会太好,不适合大批量创建,但对于大多数情况来说应该足够。 先决条件: 
 代码: 
 
 | 
                
| 
                         | 
                    blogger13 · 视频租赁店数据库的规范化 9 月前 | 
| 
                         | 
                    ì¤ì¤í · 为什么LEFT INNER JOIN被弃用? 10 月前 | 
| 
                         | 
                    relatively_random · 确保两个表之间一致的共同参考 10 月前 | 
| 
                         | 
                    Grenish Rai · Firestore错误“用户文档不存在” 1 年前 | 
| 
                         | 
                    Saijo-Shi · PLpgsql中的更新触发器 1 年前 | 
                         
                     | 
                    Dante · Django::配置不当:池不支持持久连接 1 年前 | 
                         
                     | 
                    YouLocalRUser · 删除重复行,保留第一行 1 年前 |