【发布时间】:2014-10-07 06:44:23
【问题描述】:
在hibernate中已经可以使用一级缓存进行缓存,那么为什么我们必须使用二级缓存呢?为什么我们不能只使用hibernate中的一级缓存而不是二级缓存?
【问题讨论】:
标签: second-level-cache hibernate-cache first-level-cache
在hibernate中已经可以使用一级缓存进行缓存,那么为什么我们必须使用二级缓存呢?为什么我们不能只使用hibernate中的一级缓存而不是二级缓存?
【问题讨论】:
标签: second-level-cache hibernate-cache first-level-cache
请参阅What are First and Second Level caching in Hibernate?,了解有关 Hibernate 缓存的详细说明。
基本上:
这是两个不同的用例,具有不同的需求,需要不同的逻辑。
【讨论】:
一级缓存工作在 Session 级别,这意味着将跟踪一个持久对象,直到当前 Session 关闭。并且在关闭此会话之前对此对象所做的任何更改都将反映在数据库中。默认开启。
二级缓存在 SessionFactory 级别工作,因此即使当前会话已关闭,对持久对象所做的所有更改也会被跟踪。您必须手动启用它。有少数供应商提供此功能,其中一些是 ehCache、SwarmCache、OScache 等。
【讨论】:
Hibernate 二级缓存是可选的缓存,在尝试在二级缓存中定位对象之前,总是会查询一级缓存。
主要用于跨会话缓存对象的需求。
【讨论】: