代码之家  ›  专栏  ›  技术社区  ›  cretzel

休眠何时从二级缓存读取?何时从数据库读取?

  •  1
  • cretzel  · 技术社区  · 17 年前

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

    Hibernate什么时候尝试从二级缓存中读取这些缓存的实体,什么时候访问数据库?当通过调用加载实体时,Hibernate是否仅从二级缓存读取 Sesssion.get() 初始化代理(包括集合)时?在执行HQL或条件查询时,Hibernate是否会命中二级缓存?

    例子?

    2 回复  |  直到 15 年前
        1
  •  4
  •   cretzel    15 年前

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

        2
  •  2
  •   Vladimir Dyuzhev    17 年前

    (注意:回答此类问题的最简单方法是打开“显示SQL”并查看HIB生成的查询。)

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

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

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