1

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

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

例子?

4

2 回答 2

4

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

于 2011-01-20T23:23:32.207 回答
2

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

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

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

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

于 2008-10-23T10:15:55.533 回答