什么时候Hibernate从二级缓存读取?何时从DB读取?

时间:2008-10-23 10:01:27

标签: java hibernate

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

Hibernate何时尝试从二级缓存中读取这些缓存的实体,以及何时访问数据库?通过调用Sesssion.get()和初始化代理(包括集合)来加载实体时,Hibernate是否只读取二级缓存? Hibernate在执行HQL或Criteria-Queries时是否会遇到二级缓存?

实施例

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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

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

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