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 缓存的良好候选者(好的候选者通常是很少更新和频繁读取的实体),那么为它们启用二级缓存会显着降低性能。