【发布时间】:2026-02-17 22:40:01
【问题描述】:
我正在使用 hibernate 开发 Soap WebServices 应用程序。我正在为每个订单生成 orderNumbers。为此,我有两个字段的下表
ORDER_SERIES LAST_ORDER_COUNT
250 欧元
要生成 ORDER_NO 首先我从上表中获取记录并将 LAST_ORDER_COUNT 增加 1 并附加 ORDER_SERIES
所以我的 ORDER_NO 将是 ORD251
之后我用新增加的 LAST_ORDER_COUNT 更新上表
ORDER_SERIES LAST_ORDER_COUNT
251 欧元
我已经编写了一个方法来执行此操作,这意味着从表中获取记录,增加 LAST_ORDER_COUNT 并附加两者并返回订单号并更新 LAST_ORDER_COUNT。我将此方法设为同步。
但在生产环境中我得到重复的 ORDER_NOs
我的肥皂网络服务正在通过 android apk 调用。
知道为什么 ORDER_NO 会重复
【问题讨论】:
-
这是因为你的操作不是原子的。您使用的是什么 DBMS。其中大多数是内置的方法来自动创建唯一 ID。
-
我正在使用 postgres 数据库
-
我找到了解决上述问题的方法。我们可以在选择记录时使用“select for update”查询。当我们使用“选择更新”选择任何记录时,该记录被锁定,直到我们更新它。意味着没有两个线程可以从特定记录中获得相同的值
标签: java multithreading hibernate synchronization