亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關于spring data jpa一級緩存的問題

 更新時間:2023年11月30日 14:58:10   作者:TheNether  
這篇文章主要介紹了關于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ù),從而提高性能

特點

  • 當應用程序調(diào)用Session接口的 save(), update(), saveOrUpdate() 時候,如果緩存中沒 有相應的對象,Hb就會自動的把查詢信息加入到緩存。
  • 當應用程序調(diào)用Session接口的 load(), get(), list() 等查詢方法的時候,會進行判斷緩存中是否有數(shù)據(jù),同摘要。
  • 當應用程序調(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()提交事務的時候,同時會清理Session的一級緩存,這是會用OID判斷一級緩存中的對象和快照中的對象是否一致,如果一致則執(zhí)行update 語句,將緩存中的內(nèi)容同步到數(shù)據(jù)庫,并且更新快照,這也就實現(xiàn)了不使用 update 語句就可以自動更新數(shù)據(jù)庫,Hibernate快照的作用也就是為了保持緩存中的數(shù)據(jù)和數(shù)據(jù)庫中的數(shù)據(jù)的一致性。

線上坑案例

總結(jié)

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

相關文章

  • Java如何解決發(fā)送Post請求報Stream?closed問題

    Java如何解決發(fā)送Post請求報Stream?closed問題

    這篇文章主要介紹了Java如何解決發(fā)送Post請求報Stream?closed問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • SpringCloud之監(jiān)控數(shù)據(jù)聚合Turbine的實現(xiàn)

    SpringCloud之監(jiān)控數(shù)據(jù)聚合Turbine的實現(xiàn)

    這篇文章主要介紹了SpringCloud之監(jiān)控數(shù)據(jù)聚合Turbine的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • Java實現(xiàn)SSL雙向認證的方法

    Java實現(xiàn)SSL雙向認證的方法

    這篇文章主要介紹了Java實現(xiàn)SSL雙向認證的方法,實例分析了ssl認證的原理與相關實現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • struts2通過action返回json對象

    struts2通過action返回json對象

    struts2通過action返回json對象其實很簡單的,首先我們需要引入jar包,然后在寫一個簡單的action就好了,接下來通過本文給大家介紹struts2通過action返回json對象的方法,感興趣的朋友一起看看吧
    2016-09-09
  • 解決SpringBoot log4j日志沒生成的問題

    解決SpringBoot log4j日志沒生成的問題

    這篇文章主要介紹了解決SpringBoot log4j日志沒生成的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java 設計模式之適配器模式詳解

    Java 設計模式之適配器模式詳解

    設計模式(Design pattern)是一套被反復使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設計經(jīng)驗的總結(jié)。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性
    2021-11-11
  • springboot利用AOP完成日志統(tǒng)計的詳細步驟

    springboot利用AOP完成日志統(tǒng)計的詳細步驟

    項目用到了過濾器,可能有的人會不理解,之所以用過濾器是因為想要在日志記錄post請求的json數(shù)據(jù)。本文重點給大家介紹springboot利用AOP完成日志統(tǒng)計的詳細步驟,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • java 出現(xiàn)問題javax.servlet.http.HttpServlet was not found解決方法

    java 出現(xiàn)問題javax.servlet.http.HttpServlet was not found解決方法

    這篇文章主要介紹了java 出現(xiàn)問題javax.servlet.http.HttpServlet was not found解決方法的相關資料,需要的朋友可以參考下
    2016-11-11
  • SpringBoot如何使用applicationContext.xml配置文件

    SpringBoot如何使用applicationContext.xml配置文件

    這篇文章主要介紹了SpringBoot使用applicationContext.xml配置文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java實現(xiàn)導出合并Excel單元格

    Java實現(xiàn)導出合并Excel單元格

    隨著數(shù)據(jù)的不斷增長,很多時候需要將數(shù)據(jù)導出到Excel中進行分析、處理和展示。本文將介紹如何使用Java實現(xiàn)Excel導出,并且可以合并單元格,需要的可以參考一下
    2023-04-04

最新評論