1樓:帳號已登出
呼叫session.load()方法時候,首先到session中找,找不到直接建立**。除非真正用到資料的時候
load方法才會進行資料庫的呼叫,那麼這個時候,如果資料庫沒有對應的id那麼方法就會跑出異常。
如果說記憶體中已經存在所有的 物件,那麼不管是load放啊還是get方法,它們都會返回記憶體中的形態 。
2樓:匿名使用者
**物件就是 查詢部分資料 等需要詳細的資料的時候在查詢 舉個例子 比如select * from 表
**物件就是隻查出對應的id 然後你需要某一個屬性的時候再查 select id from 表 然後你需要取di=5的時候在傳送 select * from 表id=5.你把sql語句開啟啊 這樣每次用hibenate的時候都知道是怎麼回事
3樓:匿名使用者
users user = (users)session.load(users.class, userid);
這裡你傳入了userid,既然沒有發出sql,我覺得應該從這裡獲得的。
4樓:
從資料庫中查詢而來的
hibernate中session的load()和get()方法如何使用,舉列子說明
5樓:匿名使用者
1、定義一個實體類
2、根據主鍵獲取資料記錄
示例:users user = (users)session.load(users.class, userid); //users是實體類,userid是主鍵值
users user = (users)session.get(users.class, userid);
6樓:
load()是首先訪問快取,如果沒有則訪問資料庫,get()是直接訪問資料庫!
hibernate的session的persist方法和load方法是起什麼作用的?
hibernate中get方法和load方法的區別
7樓:吉祥二進位制
簡單總結: 一句話,hibernate對於load方法認為該資料在資料庫中一定存在。
可以放心的使用**來延遲載入,如果在使用過程中發現了問題,只能拋異常;而對於get方法,hibernate一定要獲取到真實的資料,否則返回null。
hibernate中session的load和get方法的區別
8樓:地瓜說機
(1)get()方法直接返回實體類,如果查不到資料則返回null。load()會返回一個實體**物件(當前這個物件可以自動轉化為實體物件),但當**物件被呼叫時,如果沒有資料不存在,就會丟擲個org.hibernate.
objectnotfoundexception異常
(2)load先到快取(session快取/二級快取)中去查,如果沒有則返回一個**物件(不馬上到db中去找),等後面使用這個**物件操作的時候,才到db中查詢,這就是我們常說的 load在預設情況下支援延遲載入(lazy)
(3) get先到快取(session快取/二級快取)中去查,如果沒有就到db中去查(即馬上發出sql)。總之,如果你確定db中有這個物件就用load(),不確定就用get()(這樣效率高)
(4)get和load查詢資料庫
1. 如果查詢不到資料,get 會返回 null,但是不會報錯, load 如果查詢不到資料,則報錯objectnotfoundexception
2. 使用get 去查詢資料,(先到一級/二級)會立即向db發出查詢請求(select ...), 如果你使用的是 load查詢資料,(先到一級、二級))即使查詢到物件,返回的是一個**物件,如果後面沒有使用查詢結果,它不會真的向資料庫發select ,當程式設計師使用查詢結果的時候才真的發出select ,這個現象我們稱為懶載入(lazy)
hibernate中get方法和load方法的區別
9樓:匿名使用者
如果你使用load方法,hibernate認為該id對應的物件(資料庫記錄)在資料
庫中是一定存在的,所以它可以放心的使用,它可以放心的使用**來延遲載入該物件。在用到物件中的其他屬性資料時才查詢資料庫,但是萬一資料庫中不存在該
記錄,那沒辦法,只能拋異常objectnotfoundexception,所說的load方法拋異常是指在使用該物件的資料時,資料庫中不存在該資料
時拋異常,而不是在建立這個物件時。由於session中的快取對於hibernate來說是個相當廉價的資源,所以在load時會先查一下
session快取看看該id對應的物件是否存在,不存在則建立**。所以如果你知道該id在資料庫中一定有對應記錄存在就可以使用load方法來實現延
遲載入。
對於get方法,hibernate會確認一下該id對應的資料是否存在,首先在session快取中查詢,然後在二級快取中查詢,還沒有就查資料庫,資料庫中沒有就返回null。
雖然好多書中都這麼說:「get()永遠只返回實體類」,但實際上這是不正確的,get方法如果在session快取中找到了該id對應的物件,如果剛好該
物件前面是被**過的,如被load方法使用過,或者被其他關聯物件延遲載入過,那麼返回的還是原先的**物件,而不是實體類物件,如果該**物件還沒有
載入實體資料(就是id以外的其他屬性資料),那麼它會查詢二級快取或者資料庫來載入資料,但是返回的還是**物件,只不過已經載入了實體資料。
前面已經講了,get方法首先查詢session快取,沒有的話查詢二級快取,最後查詢資料庫;反而load方法建立時首先查詢session快取,沒有就建立**,實際使用資料時才查詢二級快取和資料庫。
總之對於get和load的根本區別,一句話,hibernate對於load方法認為該資料在資料庫中一定存在,可以放心的使用**來延遲載入,如果在使用過程中發現了問題,就拋異常;而對於get方法,hibernate一定要獲取到真實的資料,否則返回null。
hibernate中,用load方法獲取物件,但關閉session後,使用get物件的get方法,不什麼不報錯 50
10樓:匿名使用者
一、get和load方法都是根據id去獲得對應資料的,但是獲得機制不同:如果使用get方法,hibernate會去確認該id對應的資料是否存在,它首先會去session中去查詢(session快取其實就hibernate的一級快取),如果沒有,再去二級快取中去查詢,如果再沒有,就去資料庫中查詢,仍然沒有找到的話,就返回null
而使用load方法的話,hibernate會認定該id對應的資料一定存在,它也會先去session快取中去查詢,如果沒有找到,hibernate會根據lazy屬性值來確定是否使用延遲載入。如果lazy=『true』 ,就使用延遲載入,返回該**物件,等到真正訪問到該物件的屬性時才會去二級快取中查詢,如果沒有,再去資料庫中查詢,如果還沒有,就丟擲org.hibernate.
objectnotfoundexception異常。如果lazy='false' 則不使用延遲載入,這是load的訪問機制就和get一樣了。
二、對於load和get方法返回型別:雖然好多書中都這麼說:「get()永遠只返回實體類」,但實際上這是不正確的,get方法如果在 session快取中找到了該id對應的物件,如果剛好該物件前面是被**過的,如被load方法使用過,或者被其他關聯物件延遲載入過,那麼返回的還是 原先的**物件,而不是實體類物件,如果該**物件還沒有載入實體資料(就是id以外的其他屬性資料),那麼它會查詢二級快取或者資料庫來載入資料,但是 返回的還是**物件,只不過已經載入了實體資料。
使用load後不要關閉session 因為在真正要用到資料的時候 load方法要 在session開啟時候傳送sql語句往**物件裝資料
總之對於get和load的根本區別,一句話,hibernate對於load方法認為該資料在資料庫中一定存在,可以放心的使用**來延遲載入,如果在使用過程中發現了問題,只能拋異常;而對於get方法,hibernate一定要獲取到真實的資料,否則返回null。
hibernate 解釋session的load方法和get方法有什麼不同
11樓:帥弘揚
load()是首先訪問快取,如果沒有則訪問資料庫,get()是直接訪問資料庫!
4.hibernate中session的load和get方法的區別是什麼
12樓:
hibernate中get方法和load方法的根本區別
如果你使用load方法,hibernate認為該id對應的物件(資料庫記錄)在資料
庫中是一定存在的,所以它可以放心的使用,它可以放心的使用**來延遲載入該物件。在用到物件中的其他屬性資料時才查詢資料庫,但是萬一資料庫中不存在該
記錄,那沒辦法,只能拋異常objectnotfoundexception,所說的load方法拋異常是指在使用該物件的資料時,資料庫中不存在該資料
時拋異常,而不是在建立這個物件時。由於session中的快取對於hibernate來說是個相當廉價的資源,所以在load時會先查一下
session快取看看該id對應的物件是否存在,不存在則建立**。所以如果你知道該id在資料庫中一定有對應記錄存在就可以使用load方法來實現延
遲載入。
對於get方法,hibernate會確認一下該id對應的資料是否存在,首先在session快取中查詢,然後在二級快取中查詢,還沒有就查資料庫,資料庫中沒有就返回null。
雖然好多書中都這麼說:「get()永遠只返回實體類」,但實際上這是不正確的,get方法如果在session快取中找到了該id對應的物件,如果剛好該
物件前面是被**過的,如被load方法使用過,或者被其他關聯物件延遲載入過,那麼返回的還是原先的**物件,而不是實體類物件,如果該**物件還沒有
載入實體資料(就是id以外的其他屬性資料),那麼它會查詢二級快取或者資料庫來載入資料,但是返回的還是**物件,只不過已經載入了實體資料。
前面已經講了,get方法首先查詢session快取,沒有的話查詢二級快取,最後查詢資料庫;反而load方法建立時首先查詢session快取,沒有就建立**,實際使用資料時才查詢二級快取和資料庫。
總之對於get和load的根本區別,一句話,hibernate對於load方法認為該資料在資料庫中一定存在,可以放心的使用**來延遲載入,如果在使用過程中發現了問題,就拋異常;而對於get方法,hibernate一定要獲取到真實的資料,否則返回null。
Hibernate中,一級快取的作用有哪些
為了減少應用程式對物理資料來源訪問的次數,從而提高應用程式的執行效能 你從資料庫查個東西 一會你還查這個東西 他就不去資料庫找了 先到快取中找 節省了資源 hibernate的一級快取和二級快取分別是什麼 hibernate的快取包括session的快取和sessionfactory的快取,其中 s...
關於關於錯誤的作文的作文,關於關於錯誤的作文的作文300字。
每個人一生中都會犯錯誤,所以這並不是什麼稀奇的事。但是,如果在犯錯後錯誤的對待錯誤,那就不對了。那是一天晚上放學回家,我把書包往沙發上一扔,一下子坐在沙發上,只聽 啪嗒 一聲,我一看,原來是電視遙控器掉在地上摔碎了一個角,這下糟了,媽媽知道了肯定會非常生氣。我後悔極了。這可怎麼辦呢?我連忙找了一個地...
關於展望的成語,關於關於理想的成語
遠來矚 瞻 視,望 源 矚 注視。站得高,看得遠。比喻眼光遠大。繼往開來 繼承前人的事業,開闢未來的道路。來日正長 將來的日子還長著呢。表示事有可為或將來還有機會。似水流年 光陰像川流不息的江水 一去不復返。比喻光陰過得很快心馳神往 解釋 馳 賓士。心神奔向所向往的事物。形容一心向往。出處 隋書 史...