有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate缓存更新机制

我想知道有关hibernate缓存的信息:-

  1. 当我们在缓存中更新对象时,它会在数据库中自动更新。如果没有,它将如何更新

  2. 如果数据库被更新,它会在缓存中立即更新吗?如果不会,那么它将如何更新


共 (2) 个答案

  1. # 1 楼答案

    Hibernate有一个一级缓存和一个可选的二级缓存。第一级缓存是必需的,它存储要与数据库同步的连接实体

    因此,在刷新时,第一级缓存和当前db事务是同步的,而在提交时,更改也会传播到其他连接

    二级缓存有多种口味:

    1. 只读(从未更新)
    2. 非严格读写(没有缓存锁,因此当两个相互竞争的事务修改同一个条目时,不清楚谁会赢)
    3. 读写:类似于读提交的数据库隔离级别
    4. 事务性:缓存将被登记到当前JTA事务中

    一些实现也采用集群方式,并具有额外的同步选项

    同步模式越安全,性能就越差,因此请确保为应用程序用例选择正确的同步模式

  2. # 2 楼答案

    读一下这篇文章:What are First and Second Level caching in Hibernate?

    基本上Hibernate透明地管理这些缓存。因此,如果您使用的是SessionFactory,您不必担心更新的内容和存储位置,Hibernate会为您管理这些内容。缓存(在两个级别)的存在只是为了尝试减少Hibernate必须进行的数据库调用的数量。你不应该试图直接控制一级缓存,如果你正在对系统进行一些认真的优化,你应该只尝试显式地配置二级缓存

    但要回答你的问题:

    1. 据我所知,您不会更新缓存的实例。如果您正在执行更新,Hibernate将更新数据库并将新对象状态持久化到一级缓存

    2. 一级缓存是,二级缓存否,您可以将二级缓存配置为定期使持久化数据过期,但正如documentation所述,缓存不知道对持久化存储所做的更改

    阅读文档,看看这是否进一步回答了你的问题