记录一次使用事务不规范而造成的低级错误

146 阅读2分钟

以此文章来记录使用@Transcational不规范而造成的低级错误。

最近接到了一个需求,大概描述就是通过解析Excel来取出每一行的记录,将解析出来的结果按照A、B层级保存到数据库。

在具体的实现中,保存A和保存B的接口已经存在,只需要根据Excel中的内容分别构造拼接出两个接口的入参,再在一个新方法中依次调用A、B接口即可,将这个方法称为save,最开始在这个save方法上加了@Transcational注解

image.png

而在saveA方法中,会将A保存到数据库中,这一操作是有事务控制的,而保存成功后会返回一个id,重点来了!!!

在保存完A后,在saveA方法中仍然会有一个查询的场景,这个查询场景的查询条件是上一步骤保存A后返回的id,而此时有id证明此时已经成功保存到数据库中,而这个场景查询执行后却抛出来**“XXX不存在”**

奇怪了,明明通过日志已经能看到保存A成功后已经返回了一个id,为什么在保存后,在另外一个查询场景时却提示查询不到呢?

最后再排查时,发现在一开始在最外层的方法加了个事务注解,来保证分别调用保存A和保存B的动作一致性,而此时,在保存A后,在同一个方法内再根据返回的id查询时却提示不一致,原因在于最外层的事务注解控制上,由于整个方法没有执行完,导致事务没有提交,因此在方法内部的查询中根据返回的id查询抛出“xxx不存在”

找到原因后,发现是一个低级错误,,有点点尴尬,,,

谨以本篇文章来记录所犯的低级错误

一步一个脚印,努力学习进步,踩过的坑不再踩,直到没有坑可踩!