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

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

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

spring data jpa一級(jí)緩存

jpa更新數(shù)據(jù),數(shù)據(jù)庫(kù)更新了,但是查詢(xún)出來(lái)的還是更新前的問(wèn)題,這是因?yàn)閖pa的一級(jí)緩存,查詢(xún)默認(rèn)是從緩存中查詢(xún)的,而不是從DB查詢(xún)。

解決辦法

repository

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

entityManager對(duì)象

通過(guò) em.clear(); 在每次查詢(xún)前清除 JPA 緩存

spring data jpa的那些坑

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

hibernate緩存機(jī)制

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

在Hibernate的一級(jí)緩存空間進(jìn)行查找,如果通過(guò)OID匹配到了對(duì)象,就直接從一級(jí)緩存中取出使用,如果沒(méi)有找到匹配該OID值的對(duì)象,這才會(huì)進(jìn)行查詢(xún)數(shù)據(jù)庫(kù)。

當(dāng)從數(shù)據(jù)庫(kù)中查詢(xún)數(shù)據(jù)的時(shí)候,該數(shù)據(jù)就會(huì)被放入到Session緩存中,目的就是為了減少數(shù)據(jù)庫(kù)的訪問(wèn)次數(shù),從而提高性能

特點(diǎn)

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

案例

   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í)緩存中沒(méi)有數(shù)據(jù),所以會(huì)向數(shù)據(jù)庫(kù)發(fā)送一條sql語(yǔ)句進(jìn)行查詢(xún),第二次調(diào)用get()的時(shí)候,則不會(huì)發(fā)送sql語(yǔ)句,而是從一級(jí)緩存中取的,所以u(píng)ser和user2的內(nèi)存地址相等

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

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

線上坑案例

總結(jié)

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

相關(guān)文章

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

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

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

    使用Spring Boot+MyBatis框架做查詢(xún)操作的示例代碼

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

    springboot?項(xiàng)目啟動(dòng)后無(wú)日志輸出直接結(jié)束的解決

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

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

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

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

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

    SpringBoot 整合線程池的示例詳解

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

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

    棧和隊(duì)列,嚴(yán)格意義上來(lái)說(shuō),也屬于線性表,因?yàn)樗鼈円捕加糜诖鎯?chǔ)邏輯關(guān)系為 "一對(duì)一" 的數(shù)據(jù),但由于它們比較特殊,因此將其單獨(dú)作為一章,做重點(diǎn)講解
    2022-02-02
  • java垃圾回收原理之GC算法基礎(chǔ)

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

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

    Spring MVC簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

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

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

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

最新評(píng)論

邵武市| 合阳县| 友谊县| 喜德县| 兴文县| 盐源县| 林芝县| 汉川市| 东宁县| 黑河市| 卓尼县| 朝阳区| 盘山县| 铁力市| 吉林市| 卓尼县| 新野县| 澄迈县| 达日县| 会东县| 巴林左旗| 县级市| 永昌县| 库伦旗| 屏边| 封开县| 红原县| 高台县| 盐城市| 弥渡县| 榆社县| 铜山县| 巩义市| 林甸县| 墨脱县| 杭州市| 太谷县| 会泽县| 县级市| 阳高县| 黎城县|