JPA 缓存
2024-10-02 04:19:12
JPA有两种类型的缓存:
EntityManager自身就是一种缓存。事务中从数据库获取的和写入到数据库的数据会被缓存(什么样的数据会被缓存,在后面有介绍)。在一个程序中也许会有很多个不同的EntityManager实例,每一个实例运行着不同的事务,拥有着它们自己的缓存。
当EntityManager提交一个事务后,它缓存的所有数据就会被合并到一个全局的缓存中。所有的EntityManager都能够访问这个全局的缓存。
全局缓存被称为二级缓存(Level 2 Cache),而EntityManager拥有的本地缓存被称为一级缓存(Level 1 Cache)。所有的JPA实现都拥有一级缓存,并且对它没有什么可以调优的。而二级缓存就不同了:大多数JPA实现都提供了二级缓存,但是有些并没有把启用它作为默认选项,比如Hibernate。一旦启用了二级缓存,它的设置会对性能产生较大的影响。
只有当使用实体的主键进行访问时,JPA的缓存才会工作。这意味着,下面的两种获取方式会将获取的结果放入到JPA的缓存中:
- 调用find()方法,因为它需要接受实体类的主键作为参数
- 调用实体类型的getter方法来得到关联的实体类型,本质上,获取关联的实体对象也是通过关联对象的主键得到,因为在数据库的表结构中,存放的是该关联对象的外键信息。
那么当EntityManager需要通过主键或者关联关系获取一个实体对象时,它首先会去二级缓存中寻找。如果找到了,那么它就不需要对数据库进行访问了。
链接
最新文章
- MySQL数据库权限操作指南
- 学习WPF——WPF布局——了解布局容器
- ajax该什么时候用
- imx6 kernel clock
- php之面向对象
- iOS取证将如漫漫长夜
- 集成Spring后HibernateTemplate实现分页
- RedHat7 部署ELK日志分析系统
- cocos2d 制作动态光晕效果基础 —— blendFunc
- hdu4638Group
- NOI冲刺计划
- oracle编译 失效对象方式
- BAT清理垃圾
- Oracle EBS-SQL (PO-10):检查过期采购未接收订单.sql
- 04737_C++程序设计_第6章_继承和派生
- matlab字符串操作
- [补档]暑假集训D7总结
- Luogu CF451E Devu and Flowers 题解报告
- 【汇总目录】Git
- C++标准库algorithm
热门文章
- kafka入门之broker-集群管理
- AgileConfig-轻量级配置中心 1.1.0 发布,支持应用间配置继承
- Intel s2600系列做虚拟化需要注意的item
- springmvc<;三>; 异常解析链与视图解析链
- 第15.40节、PyQt(Python+Qt)实战:moviepy实现MP4视频转gif动图的工具
- 第十一章、Designer中主窗口QMainWindow类
- PyQt(Python+Qt)学习随笔:Qt Designer中主窗口对象dockNestingEnabled属性
- 团队作业part5--测试与发布(Alpha版本)
- 冲刺Day5
- springcloud gateway解决跨域问题