Hibernate get,load

當我們使用session.load()方法來加載一個對象時,此時並不會發出sql語句,會首先查詢session緩存,如果沒有則創建一個代理對象,這個代理對象只保存了實體對象的id值,只有當我們要使用這個對象,得到其它屬性時,這個時候纔會發出sql語句,從數據庫中或二級緩存中去查詢我們的對象。

get方法首先查詢session緩存,如果在session緩存中找到了該id對應的對象,如果剛好該對象前面是被代理過的,如被load方法使用過,或者被其他關聯對象延遲加載過,那麼返回的還是原先的代理對象,而不是實體類對象。
如果該代理對象還沒有加載實體數據(就是id以外的其他屬性數據),那麼它會查詢二級緩存或者數據庫來加載數據,但是返回的還是代理對象,只不過已經加載了實體數據。
即只要調用get就會發sql語句
發佈了33 篇原創文章 · 獲贊 0 · 訪問量 1162
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章