ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 一级缓存 为什么修改持久化类的对象后不需要update也能更新到数据库.因为一级缓存的作用. hibernate框架本身的性能不是很好,但是hibernate提供了很多的性能优化 的手段,比如延迟加载,缓存. hibernate提供了两个级别的缓存: ### 一级缓存: 称为Session级别的缓存,因为一级缓存的生命周期与session一致的.自带的,不可卸载的.(由session中一系列的java集合构成的). 除了删除,增改查和数据库打完交道都会往一级缓存中留一份,但是session只要关闭,一级缓存的数据全部清空.查询的时候先去一级缓存查询,查询到就使用一级缓存的,查不到就去数据库中查 ,然后保存在一级缓存中一份. ### 二级缓存: 称为SessionFactory级别的换成.需要进行配置的缓存插件.默认不开启的(ehcache).基本不用了,被redis代替了. ## 持久化类自动更新的原理 一级缓存中分为储存区和快照区.当从数据库查询数据后,将数据往存储区和快照区都放一份. 当数据被更改后.储存区的内容也被修改.当调用commit的时候,hibernate会将存储区和快照区的数据进行对比.如果一致,什么也不做.如果不一致,会将存储区的内容存入数据库中. ## 一级缓存的关闭方式 ``` session.close(); ``` ``` session.clear(); ``` ``` session.evict(); //指定清除一级缓存中的数据 ```