diff --git a/inventory-backend/app/services/trans_service.py b/inventory-backend/app/services/trans_service.py index 6fddfc3..df20fa9 100644 --- a/inventory-backend/app/services/trans_service.py +++ b/inventory-backend/app/services/trans_service.py @@ -95,8 +95,11 @@ class TransService: # ============================================== # ★ 防线3:并发超卖与负库存 - 锁行后再查可用库存 + # ⚠️ 不要在此加 joinedload(ModelClass.base)!PG 禁止 FOR UPDATE + # 应用到 outer join 的 nullable 侧,会报 FeatureNotSupported + # 并有死锁风险。stock.base 走单条 lazy 加载是已知取舍。 # ============================================== - stock = ModelClass.query.options(joinedload(ModelClass.base)).with_for_update().get(stock_id) + stock = ModelClass.query.with_for_update().get(stock_id) if not stock: raise ValueError(f"库存不存在 ID:{stock_id}") # ==============================================