最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于spring data jpa一級緩存的問題

 更新時間:2023年11月30日 14:58:10   作者:TheNether  
這篇文章主要介紹了關(guān)于spring data jpa一級緩存的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

spring data jpa一級緩存

jpa更新數(shù)據(jù),數(shù)據(jù)庫更新了,但是查詢出來的還是更新前的問題,這是因為jpa的一級緩存,查詢默認是從緩存中查詢的,而不是從DB查詢。

解決辦法

repository

update方法上加入@Modifying(clearAutomatically = true)即可,它更新完數(shù)據(jù)庫后會主動清理一級緩存,但我用了好像沒什么效果,可能使用方法不對,建議使用下面這個

entityManager對象

通過 em.clear(); 在每次查詢前清除 JPA 緩存

spring data jpa的那些坑

springdatajpa是持久化框架,底層是hibernate實現(xiàn)的,基本原理與hibernate一致。

hibernate緩存機制

Hibernate的一級緩存就是指Session緩存,此Session非http的session會話技術(shù),可以理解為JDBC的Connection,連接會話,Session緩存就是一塊內(nèi)存空間,用來存放相互管理的java對象,在使用Hibernate查詢對象的時候,首先使用對象的OID(ObjectID)

在Hibernate的一級緩存空間進行查找,如果通過OID匹配到了對象,就直接從一級緩存中取出使用,如果沒有找到匹配該OID值的對象,這才會進行查詢數(shù)據(jù)庫。

當從數(shù)據(jù)庫中查詢數(shù)據(jù)的時候,該數(shù)據(jù)就會被放入到Session緩存中,目的就是為了減少數(shù)據(jù)庫的訪問次數(shù),從而提高性能

特點

  • 當應(yīng)用程序調(diào)用Session接口的 save(), update(), saveOrUpdate() 時候,如果緩存中沒 有相應(yīng)的對象,Hb就會自動的把查詢信息加入到緩存。
  • 當應(yīng)用程序調(diào)用Session接口的 load(), get(), list() 等查詢方法的時候,會進行判斷緩存中是否有數(shù)據(jù),同摘要。
  • 當應(yīng)用程序調(diào)用Session接口的 close() Session緩存會被清空

案例

   public void demo1 (){
		Session session = HibernateUtils.openSession();
		Transaction transaction = session.beginTransaction();
		
		User user1 = session.get(User.class, "1");
		System.out.println(user1);
		System.out.println("-------------");
		User user2 = session.get(User.class, "1");
		System.out.println(user2);
		System.out.println(user1 == user2);
		
		transaction.commit();
		session.close();
	}

我們發(fā)現(xiàn)第一次執(zhí)行Session的get()方法的時候,由于一級緩存中沒有數(shù)據(jù),所以會向數(shù)據(jù)庫發(fā)送一條sql語句進行查詢,第二次調(diào)用get()的時候,則不會發(fā)送sql語句,而是從一級緩存中取的,所以user和user2的內(nèi)存地址相等

一級緩存的快照區(qū)

Hibernate向一級緩存放入數(shù)據(jù)的時候,同時復制一份放到Hibernate快照中,當使用commot()提交事務(wù)的時候,同時會清理Session的一級緩存,這是會用OID判斷一級緩存中的對象和快照中的對象是否一致,如果一致則執(zhí)行update 語句,將緩存中的內(nèi)容同步到數(shù)據(jù)庫,并且更新快照,這也就實現(xiàn)了不使用 update 語句就可以自動更新數(shù)據(jù)庫,Hibernate快照的作用也就是為了保持緩存中的數(shù)據(jù)和數(shù)據(jù)庫中的數(shù)據(jù)的一致性。

線上坑案例

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA實現(xiàn)JDBC的操作步驟

    IDEA實現(xiàn)JDBC的操作步驟

    JDBC提供了一種基準,據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序,本文給大家介紹IDEA實現(xiàn)JDBC的操作步驟,感興趣的朋友一起看看吧
    2022-01-01
  • 使用Spring Boot+MyBatis框架做查詢操作的示例代碼

    使用Spring Boot+MyBatis框架做查詢操作的示例代碼

    這篇文章主要介紹了使用Spring Boot+MyBatis框架做查詢操作的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • springboot?項目啟動后無日志輸出直接結(jié)束的解決

    springboot?項目啟動后無日志輸出直接結(jié)束的解決

    這篇文章主要介紹了springboot?項目啟動后無日志輸出直接結(jié)束的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • JavaWeb項目打開網(wǎng)頁出現(xiàn)Session Error的異常解決方案

    JavaWeb項目打開網(wǎng)頁出現(xiàn)Session Error的異常解決方案

    這篇文章主要介紹了JavaWeb項目打開網(wǎng)頁出現(xiàn)Session Error的異常解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Java Optional解決空指針異??偨Y(jié)(java 8 功能)

    Java Optional解決空指針異??偨Y(jié)(java 8 功能)

    這篇文章主要介紹了Java Optional解決空指針異??偨Y(jié)(java 8 功能),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • SpringBoot 整合線程池的示例詳解

    SpringBoot 整合線程池的示例詳解

    線程池是一種利用池化技術(shù)思想來實現(xiàn)的線程管理技術(shù),主要是為了復用線程、便利地管理線程和任務(wù)、并將線程的創(chuàng)建和任務(wù)的執(zhí)行解耦開來,這篇文章主要介紹了SpringBoot 整合線程池的示例詳解,需要的朋友可以參考下
    2024-08-08
  • Java 棧和隊列的相互轉(zhuǎn)換詳解

    Java 棧和隊列的相互轉(zhuǎn)換詳解

    棧和隊列,嚴格意義上來說,也屬于線性表,因為它們也都用于存儲邏輯關(guān)系為 "一對一" 的數(shù)據(jù),但由于它們比較特殊,因此將其單獨作為一章,做重點講解
    2022-02-02
  • java垃圾回收原理之GC算法基礎(chǔ)

    java垃圾回收原理之GC算法基礎(chǔ)

    本章簡要介紹GC的基本原理和相關(guān)技術(shù), 下一章節(jié)再詳細講解GC算法的具體實現(xiàn)。各種垃圾收集器的實現(xiàn)細節(jié)雖然并不相同,但總體而言,垃圾收集器都專注于兩件事情:查找所有存活對象,拋棄其他的部分,即死對象,不再使用的對象
    2022-01-01
  • Spring MVC簡介_動力節(jié)點Java學院整理

    Spring MVC簡介_動力節(jié)點Java學院整理

    Spring MVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面。今天先從寫一個Spring MVC的HelloWorld開始,讓我們看看如何搭建起一個Spring mvc的環(huán)境并運行程序,感興趣的朋友一起學習吧
    2017-08-08
  • 使用java批量寫入環(huán)境變量的實現(xiàn)

    使用java批量寫入環(huán)境變量的實現(xiàn)

    本文主要介紹了使用java批量寫入環(huán)境變量,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-03-03

最新評論

班玛县| 宜丰县| 阿巴嘎旗| 大城县| 苍南县| 高阳县| 古丈县| 固安县| 特克斯县| 天水市| 湖北省| 芦山县| 朝阳市| 延安市| 嫩江县| 宝山区| 天全县| 合山市| 大兴区| 永新县| 茶陵县| 怀远县| 饶阳县| 九寨沟县| 三亚市| 砚山县| 临夏市| 宁夏| 承德县| 栾城县| 西乌珠穆沁旗| 西平县| 左贡县| 获嘉县| 神农架林区| 克东县| 民乐县| 元谋县| 仁布县| 洪江市| 两当县|