gpt4 book ai didi

java - 可靠地跟踪 Hibernate 所做的更改

转载 作者:搜寻专家 更新时间:2023-10-31 20:08:45 25 4
gpt4 key购买 nike

我正在使用通过

注册的 PostUpdateEventListener
registry.appendListeners(EventType.POST_COMMIT_UPDATE, listener)

和其他一些监听器,以便跟踪 Hibernate 所做的更改。这非常有效,但是,我看到了一个问题:

比方说,为了通过 id 跟踪一些 amount,我只需执行

 amountByIdConcurrentMap.put(id, amount);

在每个 POST_COMMIT_UPDATE 上(让我们忽略其他操作)。问题是此调用发生在提交后的某个时间。因此,如果两个提交一个接一个地写入同一实体,我可能会以错误的顺序接收事件,最终以较旧的数量存储。

  • 这真的可能吗?或者这些操作是否以某种方式同步?
  • 有没有办法防止或至少检测到这种情况?

最佳答案

稍后提出两个问题和一个建议

  1. 您确定需要此优化吗?为什么不通过查询获取写入数据库的金额。是什么让您有理由使用缓存。

  2. 您如何确保在将金额写入数据库之前的计算是正确同步的,以便多个线程或可能的节点不使用旧数据来计算金额并因此覆盖结果后来的计算?

我想您正确处理了问题 2。然后你必须选择:

  1. 悲观锁定,这意味着您可以在提交之前立即以独占方式更新您的缓存,而不会出现并发问题。
  2. 乐观锁定:在这种情况下,您的数据库记录中有一种时间戳或计数器,您也可以将其与金额一起放入缓存中。您可以使用这个值来找出最近的值是多少。

关于java - 可靠地跟踪 Hibernate 所做的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47254385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com