a short description of the bug
方法初始,从DB中查出一个Model。然后中间有一段其他的代码,需要一定时间执行完,这期间改变了Model的某些值。最后想更新这个Model到数据库,于是使用了saveOrUpdate方法。
这引发的bug是,在另外一个地方,执行了删除这个Model的操作,这个删除操作在上面查出Model之后,调用saveOrUpdate方法之前。于是这条本该删除的记录被重新插入了数据库。
the fix
改为调用update方法
the lession i learned
- 别因为别人跟你描述这个问题多么难定位,就害怕了,就自己也觉得有多难了,就像复杂了。别人给你一个bug,他描述这个bug很难,但是我依然将这个bug当成我一个清白的全新的bug去解决,和别人描述它多难无关。
- 见到了一种出问题的模式,以后会尽量不出这样的问题,或者出了之后能快速定位。
- 一开始我修复这个bug的时候,做了另外一种假设:某中情况,比如Hibernate的锁的问题,导致了删除操作没成功也没报错。这里我学到的一课是,要提出产生bug的假设,但是不要一定认为就一定是这个假设导致的这个问题,要保持开放的心,这个问题很可能是这个原因,但也很可能是别的原因导致的。
- 这个问题是我求助于别人帮忙定位到的,需要帮助的时候要求助。