@oneToMany中save the transient instance before flushing问题的解决

save the transient instance before flushing,翻译过来就是 在刷新之前保存临时实例。

这个问题通常出现在父子实体的存储顺序上,比如物业对小区是一对多的关系那么我们在保存数据时就应该先保存物业再更新小区,如果先更新小区的话那么他对应的物业还是属于一个临时数据也就是说物业还没有自己对应的ID,那么小区自然也就更新不了。
但是这个问题通常不仅仅出现在保存顺序上,我们来看看下面这个实例:
@oneToMany中save the transient instance before flushing问题的解决_第1张图片
当我想要更新小区时就会发生上述报错,报错行为第132行,这里并没有进行存储操作,并且理论上是已经存储完了物业,再查询对应小区也不会有什么问题。

排查之后发现第132行是根据propertyCompany来查找的,而我们保存的是newPropertyCompany,也就是说propertyCompany是没有ID的,newPropertyCompany存在ID。

所以这个问题出现的根本原因是操作了没有ID的实体,当我们遇到此类报错时只需要再控制台中输出一下操作实体的ID,很容易就可以排查出来。

你可能感兴趣的:(springboot)