2016-11-17 81 views
0

我正在使用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越来越重复

+0

这是因为你的操作不是原子的。你使用什么DBMS。其中大多数都是内置的方法来自动创建唯一的ID。 – Fildor

+0

我正在使用postgres数据库 – user3787163

+0

我找到了解决上述问题的方法。选择记录时,我们可以使用“选择更新”查询。当我们使用“select for update”选择任何记录时,那条记录将被锁定,直到我们更新它。意味着没有两个线程可以从特定记录中获得相同的值 – user3787163

回答

0

ID必须在数据库中自动递增,它应该是一个主/唯一键以及任何想法。如果你将来不会这样做,那么当你同时有更多的请求时,你会遇到这种类型的问题。