Cod*_*der 2 java concurrency hibernate jpa transactions
我正在使用 Java Spring 框架和 Hibernate。我正在开发一个电子商务网络应用程序,公共用户可以从该网络应用程序购买产品。每个产品都会有一个数量计数。
问题
我想防止出现两个并发用户购买相同产品的数量值为 1 的情况。在这种情况下,只有第一个用户应该购买该产品,而第二个用户应该收到“无库存”消息。
工作流程
我打算减少数量,然后将购买信息发送到支付网关。如果支付网关遇到支付问题,我将增加数量计数。在购买信息发送到支付网关之前,锁定将被释放。
所以我的问题是,
1)我想确认这个关于悲观锁定的答案确实有助于解决我的问题。
2)我的工作流程还好吗?有一个更好的方法吗?
使用乐观锁定,如果两个用户加载了数量为 的同一实体1
,并且一个用户刚刚进行了购买并减少了数量计数器,那么第二个用户将无法更新产品实体,因为他的Product
版本不更新t 与读取实体时在数据库中找到的那个匹配。
如果实体version
发生更改,则在调用该方法时,UPDATE
尝试匹配旧实体的语句version
将返回 a 。那时 Hibernate 将检测到过时的状态情况并抛出一个.0
executeUpdate
PreparedStatement
OptimisticLockException
SpringTransactionInterceptor
将捕获该事件OptimisticLockException
,并且关联的事务将被回滚。
乐观锁定方法比悲观锁定具有更好的扩展性,并且它也适用于多请求逻辑事务。
归档时间: |
|
查看次数: |
6064 次 |
最近记录: |