真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Hibernate怎么對數(shù)據(jù)索引進行緩存

這篇文章主要介紹“Hibernate怎么對數(shù)據(jù)索引進行緩存”,在日常操作中,相信很多人在Hibernate怎么對數(shù)據(jù)索引進行緩存問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Hibernate怎么對數(shù)據(jù)索引進行緩存”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

創(chuàng)新互聯(lián)主要從事成都做網站、網站設計、外貿營銷網站建設、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務無棣,十余年網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220

在Hibernate中對集合類型進行緩存時,是分兩部分進行緩存的,首先緩存集合中所有實體的id列表,然后緩存實體對象,這些實體對象的id列表,就是所謂的數(shù)據(jù)索引。當查找數(shù)據(jù)索引時,如果沒有找到對應的數(shù)據(jù)索引,這時就會一條select SQL的執(zhí)行,獲得符合條件的數(shù)據(jù),并構造實體對象集合和數(shù)據(jù)索引,然后返回實體對象的集合,并且將實體對象和數(shù)據(jù)索引納入Hibernate的緩存之中。另一方面,如果找到對應的數(shù)據(jù)索引,則從數(shù)據(jù)索引中取出id列表,然后根據(jù)id在緩存中查找對應的實體,如果找到就從緩存中返回,如果沒有找到,在發(fā)起select SQL查詢。在這里我們看出了另外一個問題,這個問題可能會對性能產生影響,這就是集合類型的緩存策略。如果我們如下配置集合類型:

  …        

這里我們應用了配置,如果采用這種策略來配置集合類型,Hibernate數(shù)據(jù)索引進行緩存,而不會對集合中的實體對象進行緩存。如上配置我們運行下面的代碼:

User user=(User)session.load(User.class,”1”);  Collection addset=user.getAddresses();  Iterator it=addset.iterator();  while(it.hasNext()){  Address address=(Address)it.next()  System.out.println(address.getAddress());  }  System.out.println(“Second query……”);  User user2=(User)session.load(User.class,”1”);  Collection it2=user2.getAddresses();  while(it2.hasNext()){  Address address2=(Address)it2.next();  System.out.println(address2.getAddress());  }

運行這段代碼,會得到類似下面的輸出:

Select * from user where id=’1’;  Select * from address where user_id=’1’;  Tianjin  Dalian  Second query……  Select * from address where id=’1’;  Select * from address where id=’2’;  Tianjin  Dalian

我們看到,當?shù)诙螆?zhí)行查詢時,執(zhí)行了兩條對address表的查詢操作,為什么會這樣?這是因為當***次加載實體后,根據(jù)集合類型緩存策略的配置,只對集合數(shù)據(jù)索引進行了緩存,而并沒有對集合中的實體對象進行緩存,所以在第二次再次加載實體時,Hibernate找到了對應實體的數(shù)據(jù)索引,但是根據(jù)數(shù)據(jù)索引,卻無法在緩存中找到對應的實體,所以Hibernate數(shù)據(jù)索引發(fā)起了兩條select SQL的查詢操作,這里造成了對性能的浪費,怎樣才能避免這種情況呢?我們必須對集合類型中的實體也指定緩存策略,所以我們要如下對集合類型進行配置:

  …        

此時Hibernate會對集合類型中的實體也進行緩存,如果根據(jù)這個配置再次運行上面的代碼,將會得到類似如下的輸出:

Select * from user where id=’1’;  Select * from address where user_id=’1’;  Tianjin  Dalian  Second query……  Tianjin  Dalian

這時將不會再有根據(jù)數(shù)據(jù)索引進行查詢的SQL語句,因為此時可以直接從緩存中獲得集合類型中存放的實體對象。

到此,關于“Hibernate怎么對數(shù)據(jù)索引進行緩存”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網站題目:Hibernate怎么對數(shù)據(jù)索引進行緩存
標題鏈接:http://weahome.cn/article/pocohe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部