jpa二级缓存,Repository二级缓存

本文探讨了JPA的二级缓存特性,指出其作为全局应用缓存能提升性能,但也可能导致数据陈旧。二级缓存适用于读多写少的数据,并强调在使用时需要注意事务管理和锁策略。通过示例展示了如何配置和使用二级缓存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JPA 二级缓存是跨持久化上下文共享实体状态的,是真正意义上的全局应用缓存。如果二级缓存激活,JPA 会先从一级缓存寻找实体,未找到再从二级缓存中寻找

当二级缓存有效时,你就不能依靠事务来保护并发数据的,而是依靠锁策略:

  • 在确认修改后,需要手工处理乐观锁失败
  • 配置失效期,以及刷新策略,最小化使用锁策略

二级高速缓存通常是用来提高性能。但是,使用缓存可能会导致提取“陈旧”数据,表 1 展示了 JPA 的二级缓存优点和缺点:

表 1. JPA 的二级缓存优点和缺点

所以二级缓存最好是用在经常阅读经常和修改的数据,而不是至关重要的数据。


@Test

public void testjpaSecondLevelCache() {
String jpql="from Department d";
EntityManager manager=entityManagerFactory.createEntityManager();
Query query=manager.createQuery(jpql);
List<Department> list=query.setHint(org.hibernate.ejb.QueryHints.HINT_CACHEABLE,true).getResultList();

manager.close();

manager=entityManagerFactory.createEntityManager();

query=manager.createQuery(jpql);
list=query.setHint(org.hibernate.ejb.QueryHints.HINT_CACHEABLE,true).getResultList();

manager.close();

}


---------------------------------------------------

@QueryHints({@QueryHint(name=org.hibernate.ejb.QueryHints.HINT_CACHEABLE,value="true")})
@Query("from Department d")
List<Department> getAll();

@Test
public void testRepositorySecondLevelCache() {
List<Department> list=departmentRepository.getAll();
list=departmentRepository.getAll();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值