Hibernate 二级缓存

2024 年 8 月 29 日 | 阅读 3 分钟

Hibernate 二级缓存会话工厂的所有会话对象使用公共缓存。如果您有一个会话工厂的多个会话对象,这将非常有用。

SessionFactory 保存二级缓存数据。它是全局的,适用于所有会话对象,并且默认情况下未启用。

不同的供应商提供了二级缓存的实现。

  1. EH Cache
  2. OS Cache
  3. Swarm Cache
  4. JBoss Cache

每个实现都提供不同的缓存使用功能。有四种使用二级缓存的方法。

  1. read-only: 缓存将仅适用于只读操作。
  2. nonstrict-read-write: 缓存将适用于读写,但一次只能执行一个。
  3. read-write: 缓存将适用于读写,可以同时使用。
  4. transactional: 缓存将适用于事务。

cache-usage 属性可以应用于 hbm.xml 文件中的类或集合级别。下面给出了定义缓存用法的示例

让我们看看二级缓存的实现和缓存用法。

实施read-onlynonstrict-read-writeread-writetransactional
EH Cache是的是的是的不能
OS Cache是的是的是的不能
Swarm Cache是的是的不能不能
JBoss Cache不能不能不能是的

Hibernate 二级缓存示例

要通过示例了解二级缓存,我们需要遵循以下步骤

  1. 使用 Maven 创建持久类
  2. 在 pom.xml 文件中添加项目信息和配置
  3. 创建配置文件
  4. 创建检索持久对象的类。

在这里,我们假设 oracle 数据库中存在一个 emp1012 表,其中包含一些记录。

1) 使用 Maven 创建持久类。

文件:Employee.java

2) 在 pom.xml 文件中添加项目信息和配置。

打开 pom.xml 文件并单击“source”。现在,在 <dependencies>....</dependencies> 标签之间添加以下依赖项。


3) 创建配置文件

文件: hibernate.cfg.xml

要实现二级缓存,我们需要在配置文件中定义 cache.provider_class 属性。


4) 创建检索持久对象的类。

文件: FetchTest.java

输出

hibernate second level cache output

正如我们在这里看到的,hibernate 不会执行两次查询。如果您不使用二级缓存,hibernate 将执行两次查询,因为两个查询使用不同的会话对象。