据我所知,Hibernate 让您将实体和集合配置为存储在二级缓存中。
Hibernate 什么时候尝试从二级缓存中读取这些缓存的实体,什么时候命中 DB?Sesssion.get()
当通过调用加载实体和初始化代理(包括集合)时,Hibernate 是否只从二级缓存中读取?Hibernate 在执行 HQL 或 Criteria-Queries 时是否会命中二级缓存?
例子?
二级缓存仅包含通过 id 的实体,因此当通过 id 检索实体时(即隐式获取、加载或解析代理),可以访问二级缓存。任何其他查询(hal、criteria)都将绕过缓存并命中数据库——至少只要不使用查询缓存。
(注意:回答这类问题的最简单方法是打开 show_sql 并查看 Hib 生成的查询。)
有时查询只返回记录的 PK(例如,对于迭代查询),然后 Hib 可以使用缓存。
检索链接对象时也可以使用缓存。
我不能在这里给你确切的规则。我还怀疑答案取决于所使用方言的能力。