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