【发布时间】:2015-12-19 14:28:15
【问题描述】:
众所周知,hibernate 有 L1 和 L2 缓存。现在我对他们的商店有一些疑问:
- 如果 L2 缓存启用并且 L1 和 L2 缓存中没有命中,则休眠将查询 DB。但是,从 DB 中获取结果后,它会将结果仅存储在 L2 缓存中还是同时存储在 L1 和 L2 中或其他任何地方?
- 如果启用了 L2 缓存并且一个会话的 L1 有结果但 L2 没有,那么休眠会将这个结果从 L1 复制到 L2?
- 如果 L2 缓存启用并且 L2 有结果但 L1 没有,那么休眠会将其从 L2 复制到 L1?
更新
4.如果我有下一个代码并且没有 L2 缓存和查询缓存:
List<Student> persons = session.createQuery("from Student").list(); List<Student> students = session.createQuery("from Student").list();
为什么hibernate会查询数据库两次?不是有L1缓存,所以第一次只查询DB?
提前致谢!
【问题讨论】: