我有一个包含长列的表,这是一个GroupCode。我可以拥有一组产品,所以要获得一个组的所有产品,我只需要获得GroupCode相同的所有产品。
我可以将产品从一个组更改为另一个组,如果我从组中更改产品,我希望该组的所有产品都更改为新组。
如果我使用乐观并发,可能会发生这种情况:
一个用户想要从一个组中更改产品,因此他获得了具有相同groupCode的所有产品。将新的新groupCode设置为所有这些产品。
第二个用户向该组添加新产品。但是第一个用户没有这个产品,因为他在第二个用户添加新产品之前获得了所有产品。
所以最后,新产品的GroupCode错误,因为代码不正确,因为该组的所有产品都更改为新组。所以我会有一个只有一个产品的小组,这是不正确的。
使用悲观并发,第一次使用获取该组的所有产品,阻止所有产品。
第二个用户尝试向该组添加新产品,为此,首先尝试将该组的一个产品作为参考产品,但第一个用户如何阻止它,第二个用户必须等待。
第一个用户将所有产品更改为新组并取消阻止所有产品。
第二个用户获得具有新groupCode的参考产品,因此新产品将添加到正确的组中。
总之,我希望当我将产品从一个组更改为另一个组时,我想要更改该组的所有产品,并避免新产品属于旧组。
是否有可能用乐观并发解决这种情况?或者我必须使用悲观的并发?
答案 0 :(得分:0)
老实说,我在这里没有看到这个问题。如果您想将其实现为OCC,则应该遵循OCC phases。
.fadeInBlock {opacity:0;}
获取属于群组A
ABC
获得B
的引用,目前属于Record1
ABC
将A
移至群组Record1
XYZ
想要将新记录添加到B
所属的组中。因此,在插入记录之前,请获取Record1
组,现在是Record
这假设您使用了参考记录'做法。如果您的屏幕(或其他)只列出当前可用的组,同时其中一个组变空(因为您已将所有记录移动到另一个组),则无法确定是否存在并发问题或者它正在按预期工作。在这种情况下,您应该规范化数据库并将类别拆分为单独的表,以便至少用户收到该组不再存在的错误。