日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Hibernate對數(shù)據(jù)索引進行緩存

Hibernate數(shù)據(jù)索引還是比較常用的,于是我研究了一下Hibernate數(shù)據(jù)索引,在這里拿出來和大家分享一下,希望對大家有用。

創(chuàng)新互聯(lián)公司從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元邵武做網(wǎng)站,已為上家服務,為邵武各地企業(yè)和個人服務,聯(lián)系電話:028-86922220

本文我們引入了一個全新的概念——Hibernate數(shù)據(jù)索引,下面我們首先將接一下什么是數(shù)據(jù)索引。在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查詢。在這里我們看出了另外一個問題,這個問題可能會對性能產(chǎn)生影響,這就是集合類型的緩存策略。如果我們如下配置集合類型:

 
 
 
  1.  name=”com.neusoft.entity.User” table=”user”>
  2.  name=”addresses” table=”address” lazy=”true” inverse=”true”>
  3.  usage=”read-only”/>
  4.  column=”user_id”/>
  5.  class=”com.neusoft.entity.Arrderss”/>

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

 
 
 
  1. User user=(User)session.load(User.class,”1”);
  2. Collection addset=user.getAddresses();
  3. Iterator it=addset.iterator();
  4. while(it.hasNext()){
  5. Address address=(Address)it.next()
  6. System.out.println(address.getAddress());
  7. }
  8. System.out.println(“Second query……”);
  9. User user2=(User)session.load(User.class,”1”);
  10. Collection it2=user2.getAddresses();
  11. while(it2.hasNext()){
  12. Address address2=(Address)it2.next();
  13. System.out.println(address2.getAddress());
  14. }

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

 
 
 
  1. Select * from user where id=’1’;
  2. Select * from address where user_id=’1’;
  3. Tianjin
  4. Dalian
  5. Second query……
  6. Select * from address where id=’1’;
  7. Select * from address where id=’2’;
  8. Tianjin
  9. Dalian

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

 
 
 
  1.  name=”com.neusoft.entity.User” table=”user”>
  2.  name=”addresses” table=”address” lazy=”true” inverse=”true”>
  3.  usage=”read-write”/>
  4.  column=”user_id”/>
  5.  class=”com.neusoft.entity.Arrderss”/>

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

 
 
 
  1. Select * from user where id=’1’;
  2. Select * from address where user_id=’1’;
  3. Tianjin
  4. Dalian
  5. Second query……
  6. Tianjin
  7. Dalian

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


本文標題:Hibernate對數(shù)據(jù)索引進行緩存
瀏覽路徑:http://m.5511xx.com/article/copepgh.html