hibernate 中的二级缓存默认禁用
Second level Cache in hibernate disabled by default
会话工厂缓存需要在休眠中显式配置以微调查询性能。
是否有可以商定的相关原因,为什么第一级缓存(特定于会话)在休眠中开箱即用,而第二级缓存(特定于会话工厂)不是?
它符合 JPA 规范...二级缓存的实现对于 JPA 提供程序是可选的。Hibernate 和 Eclipse Link 然而实现它,但您需要手动配置...
在这里您可以找到有关缓存的所有信息 docs.oracle.com/javaee/6/tutorial/doc/gkjio.html
NOTE: One consequence of using a second-level cache in an application
is that the underlying data may have changed in the database tables,
while the value in the cache has not, a circumstance called a stale
read.
一级缓存始终启用,这就是 Hibernate 的工作方式。您可能会偶尔使用 StatelessSession 来禁用一级缓存,但您会失去几乎所有的 Hibernate 功能。
二级缓存默认禁用,因为可缓存实体的配置和选择是特定于应用程序的。例如,如果某些实体不是 L2 缓存的良好候选者(好的候选者通常是很少更新和频繁读取的实体),那么为它们启用二级缓存会显着降低性能。
会话工厂缓存需要在休眠中显式配置以微调查询性能。
是否有可以商定的相关原因,为什么第一级缓存(特定于会话)在休眠中开箱即用,而第二级缓存(特定于会话工厂)不是?
它符合 JPA 规范...二级缓存的实现对于 JPA 提供程序是可选的。Hibernate 和 Eclipse Link 然而实现它,但您需要手动配置...
在这里您可以找到有关缓存的所有信息 docs.oracle.com/javaee/6/tutorial/doc/gkjio.html
NOTE: One consequence of using a second-level cache in an application is that the underlying data may have changed in the database tables, while the value in the cache has not, a circumstance called a stale read.
一级缓存始终启用,这就是 Hibernate 的工作方式。您可能会偶尔使用 StatelessSession 来禁用一级缓存,但您会失去几乎所有的 Hibernate 功能。
二级缓存默认禁用,因为可缓存实体的配置和选择是特定于应用程序的。例如,如果某些实体不是 L2 缓存的良好候选者(好的候选者通常是很少更新和频繁读取的实体),那么为它们启用二级缓存会显着降低性能。