我正在使用hibernate在Soap WebServices应用程序上工作。在这我为每个订单生成orderNumbers。要做到这一点我有如下表两个字段java中的线程同步问题
ORDER_SERIES LAST_ORDER_COUNT
ORD 250
要生成ORDER_NO首先我通过1得到上面的表格和increament LAST_ORDER_COUNT记录,并与ORDER_SERIES
追加so so ORDER_NO would ORD251
之后,我正在更新上面的表与新的不勒斯nted LAST_ORDER_COUNT
ORDER_SERIES LAST_ORDER_COUNT
ORD 251
我写了一个方法来完成这个操作意味着得到表记录,increament LAST_ORDER_COUNT追加既没有返回订单并更新LAST_ORDER_COUNT。我使这个方法同步。
但在生产环境中我得到复制ORDER_NOs
我的肥皂web服务越来越为Android APK调用。
为什么ORDER_NO越来越重复
这是因为你的操作不是原子的。你使用什么DBMS。其中大多数都是内置的方法来自动创建唯一的ID。 – Fildor
我正在使用postgres数据库 – user3787163
我找到了解决上述问题的方法。选择记录时,我们可以使用“选择更新”查询。当我们使用“select for update”选择任何记录时,那条记录将被锁定,直到我们更新它。意味着没有两个线程可以从特定记录中获得相同的值 – user3787163