Hibernate中l(wèi)oad和get的兩大區(qū)別
1.讀取時(shí)機(jī)不同(當(dāng)lazy=true的時(shí)候)
Hibernate load是采用延遲機(jī)制(load語(yǔ)句不讀庫(kù),等使用非主鍵時(shí)才去讀庫(kù)),而Hibernate get不采用延遲機(jī)制(get語(yǔ)句時(shí)馬上讀庫(kù));
2.搜索不到數(shù)據(jù)時(shí)的情況
當(dāng)搜索的數(shù)據(jù)不存在的時(shí)候,Hibernate load依然會(huì)返回一個(gè)對(duì)象,在你使用該對(duì)象的非主鍵數(shù)據(jù)時(shí),會(huì)拋出異常;
當(dāng)搜索的數(shù)據(jù)不存在的時(shí)候,Hibernate get會(huì)返回一個(gè)null;
備注:網(wǎng)上看來(lái)說(shuō)load比get更節(jié)省資源;
我做過(guò)一個(gè)例子,即兩個(gè)線程,1號(hào)線程把數(shù)據(jù)讀出來(lái),把session關(guān)掉。過(guò)幾秒2號(hào)線程也去讀相同的記錄,這時(shí)2號(hào)線程并沒(méi)有搜索庫(kù)(沒(méi)有顯示出HQL語(yǔ)句),不管你用load還是get。
結(jié)論:我覺(jué)得它們兩個(gè)都有使用到緩存,至于更深入的我沒(méi)有去研究了。
【編輯推薦】