【问题标题】:Is the Hibernate first-level cache only synchronized one-way?Hibernate 一级缓存是否只能单向同步?
【发布时间】:2022-08-15 20:19:20
【问题描述】:

Hibernate 仅通过将其状态推送到数据库来单向同步其一级缓存,并且它永远不会以另一种方式同步它......或者我凭经验发现,因为我无法找到说明这一点的官方文档。

这里还有其他引用此主题的问题:Hibernate first level cache - does it Sync?Hibernate criteria.list() and Session refresh 目前已经相当老了。

这个最近的article 也将这种行为作为以下​​内容的一部分:

Hibernate 一级缓存可以有旧值,正如你在上面看到的,我已经让我的程序休眠了 10 秒,在那段时间我更新了值 [...],但它没有反映在同一个会话中。但在其他会话中,我们得到了更新的值。

我是否错过了官方文档中记录的地方:Official documentation(甚至是 javadoc)?

  • 我不太清楚问题是什么。如果您想问,请将问题命名为“Hibernate 一级缓存是否仅单向同步?”。这是你想问的吗?
  • 这是我的问题,是的。我编辑了原始标题以使其更清晰。谢谢

标签: java hibernate


【解决方案1】:

简而言之,是的,它是通常只同步到数据库。不过,您可以通过调用 entityManager.refresh(entity) 要求 Hibernate 刷新数据。

原因很简单,性能。想一想,如何确保内存状态是“当前”的?您将不得不不断地查询数据库并询问当前状态,因为数据库通常没有更改通知的概念。事实上,要可靠地做到这一点实际上几乎是不可能的,因为数据可能一直在变化,当你使用一个在你操作它的数据时发生变化的对象时会发生什么?

要产生“当前数据”的错觉,您将不得不使用数据库锁定。无论是悲观锁定还是乐观锁定,通过它您可以确保数据不会被其他事务更改,而您的事务正在处理数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-20
    • 2014-06-28
    • 2013-10-31
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    相关资源
    最近更新 更多