天天看點

Hibernate一級緩存(一)-Session級緩存

[size=x-large]定義[/size]

二級緩存是session中有一塊記憶體空間。緩存内對象為持久化對象,session根據持久化對象狀态的變化來更新資料庫。理論上session緩存不需要人工控制。

[size=x-large]相關函數對緩存的影響:[/size]

[size=medium]save(): [/size]會把對象加入到緩存中,并且執行insert語句,對象變為持久化對象。

[size=medium]get()和load(): [/size]作用為擷取對象,先會在緩存中查找是否存在,如果不存在則去資料庫查找并放入緩存中。傳回的對象都是緩存中的持久化對象。如果使用者在外部修改了持久化對象的屬性(成為遊離對象),則在session.close()函數中會根據屬性的變化來更新資料庫。

兩者差別:

(1)資料庫不存在對應對象時,get()函數傳回null,而load函數則抛出ObjectNotFoundException異常。

(2)load()采用延遲加載政策,不會馬上執行select語句,隻傳回一個代理執行個體,記憶體占用少,适合通過該對象标示删除或查詢其他對象的場景。get()則是馬上執行select語句,并且傳回對象執行個體和屬性。

[size=medium]update(): [/size]update()會把遊離對象加入到緩存,并且計劃執行update()語句,如果update()關聯的為持久化對象,則不起作用。

[size=medium]merge(): [/size]會把遊離對象的屬性複制到一個持久化對象中。

[size=medium]saveOrUpdate(): [/size]如果傳入臨時對象,則執行save();如果傳入遊離對象,則update();傳入持久化對象,則直接傳回該對象。

[size=medium]delete(): [/size]計劃執行一個delete語句

[size=medium]close(): [/size]清空Session中緩存