java - Hibernate 二级缓存总是在获取所有实体时调用数据库
问题描述
我通过添加以下配置在我的 sprint boot 2.1.8 应用程序中启用了休眠二级缓存:
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
我还添加了eh缓存依赖,如下所示:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>5.3.11.Final</version>
</dependency>
我将一个实体注释为可缓存:
@Entity(name = "entity")
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Table(name = "entity")
@AttributeOverride(name = "id", column = @Column(name = "entity_id"))
public class Entity extends ItemBase {
private String n1;
private String n2;
private String n3;
private int n4;
@Column(name = "n_5")
private int n5;
//getters and setters
}
每次我调用存储库类(扩展 JpaCrudRepository)并调用 findAll(); 或 findOneById(),我看到休眠日志 HQL 查询和数据库实际上被调用。
期望的行为是从数据库中获取一次实体列表并将它们保存在缓存中,在那里它们应该使用读写策略进行更新。
知道如何实现吗?
解决方案
推荐阅读
- unit-testing - 如何使用回车键触发 keyup
- android - 如何将id分配给recyclerView android的某个项目?
- excel - 如何在整个工作表中删除包含值“发票”的行
- sql - 在多连接查询中仅显示具有 MAX(DATE) 的行
- arrays - Angular - 在循环中将元素推送到数组中会使用新值更新数组的所有预先存在的值
- python - boto3 - 获取 boto3 中特定方法所需的所有 API 调用
- reactjs - 如何使用 ReactJs 将 jwt 令牌提交给 Spring Security?
- kotlin - 生产
与频道 () - vb.net - 需要在收件箱中查找特定邮件,保存附件以共享,然后将电子邮件移动到不同的文件夹 VB.Net
- javascript - 如何将函数组合内的突变转换为局部的、不可观察的突变?