又写了一天的 bug ... 被 ORM 折腾死。
没关系,又活了一天,已经很厉害了。。。
Bug 的根源
一个设备信息管理系统的表,里面会自动给设备生成设备 ID。
格式:
- 前6位为生产如期,如:211207,代表 2021年12月7日生产。
- 后3位为生产编号,如:001,代表当日生产的第一台设备。
编号的生成逻辑:
- sql like 取最新的一条 满足 211207 的记录,如果有,就判断最后三位 + 1
- 没有,就生成一条 001
这个逻辑跑了很久都没有出问题,但是今天在写一个新系统时,我偷懒 copy 过来了。
然后,另一个 bug 导致几条设备信息被软删除 (gorm 默认是使用软删除)。
于是获取到的最新一条记录,实现并不是最新的记录,因为隐藏了被软删除的设备记录。而设备 ID 又加了唯一索引,于是就再也插不进新的设备信息了。。。
gorm Unscoped
解决方法是加上 Unscoped
db.Unscoped().Where("age = 20").Find(&users)
这样无论是软删除的,还是没删除的,都能获取到。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式