【问题标题】:When does Hibernate read from second-level cache and when from DB?Hibernate 什么时候从二级缓存读取,什么时候从 DB 读取?
【发布时间】:2008-10-23 10:01:26
【问题描述】:

据我所知,Hibernate 让您将实体和集合配置为存储在二级缓存中。

Hibernate 什么时候尝试从二级缓存中读取这些缓存的实体,什么时候到达 DB?通过调用Sesssion.get() 加载实体和初始化代理(包括集合)时,Hibernate 是否仅从二级缓存中读取? Hibernate 在执行 HQL 或 Criteria-Queries 时是否会命中二级缓存?

例子?

【问题讨论】:

  • Hibernate 不会对此进行统计吗?

标签: java hibernate


【解决方案1】:

二级缓存仅包含通过 id 的实体,因此当通过 id 检索实体时(即隐式获取、加载或解析代理),可以访问二级缓存。任何其他查询(hal、criteria)都将绕过缓存并命中数据库——至少只要不使用查询缓存。

【讨论】:

    【解决方案2】:

    (注意:回答此类问题的最简单方法是打开 show_sql 并查看 Hib 生成的查询。)

    有时查询只返回记录的 PK(例如,对于迭代查询),然后 Hib 可以使用缓存。

    在检索链接对象时也可以使用缓存。

    我不能在这里给你确切的规则。我还怀疑答案取决于所使用方言的能力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多