Spring
修复幽灵占用时不要绕过数据库业务约束
一次单据复制请求被数据库自定义错误拒绝。提示指向库存质量不允许使用,但现场库存有足够实物数量,质量属性也处于允许状态。
数据库仍然掌握了拒绝写入的有效依据。可用量由实物数量减去已分配数量得到,而两层冗余计数都显示全部数量已经分配。权威预留记录中却找不到对应业务明细。触发器因此计算出可用量为零,并执行了既有业务约束。
本次处理保留了这条约束,在并发保护下修复幽灵占用,同时调整应用边界:多行复制失败时先完成事务回滚,再把数据库错误转换为用户可读的业务提示。
把数据库拒绝当作证据
排查先定位中止事务的具体语句和业务约束。复制流程已经准备好新表头,写入明细时触发数据库检查。检查会计算满足质量条件且尚未 …