Hibernate缓存更新机制

时间:2014-05-27 04:56:08

标签: java hibernate caching jpa orm

我想知道hibernate缓存: -

  1. 当我们更新Cache中的对象时,它会自动在数据库中更新。如果没有,那么它将如何更新?

  2. 如果数据库已更新,它会立即在缓存中更新,如果没有,那么它将如何更新?

2 个答案:

答案 0 :(得分:1)

Hibernate有第一级和第二级缓存。第一级缓存是强制性的,它是存储要与数据库同步的附加实体的缓存。

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

二级缓存有多种形式:

  1. 只读(从未更新)
  2. nonstrict-read-write(没有缓存锁定,因此当两个竞争事务正在修改同一个条目时,不清楚谁赢了)
  3. 读写:类似于READ_COMMITED数据库隔离级别。
  4. transactional:缓存将在当前的JTA事务中登记
  5. 某些实现也是群集的,并具有其他同步选项。

    同步模式越安全,性能就越低,所以请确保为应用程序用例选择合适的。

答案 1 :(得分:0)

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

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

但要回答你的问题:

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

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

  3. 阅读文档并查看是否可以进一步回答您的问题。