重溫Hibernate基礎(chǔ)--get/load的區(qū)別
下了個(gè)Hibernate視頻教程聽,雖然一年多以前跟老師學(xué)過(guò)Hibernate,但現(xiàn)在聽聽還是有很多收獲的,發(fā)現(xiàn)自己的知識(shí)知道的都是些皮毛,用了很久的東西,知道怎么操作怎么用,但要說(shuō)說(shuō)它的所以然,搖搖頭,呵呵
根據(jù)主鍵Id得到一個(gè)持久對(duì)象,Hibernate中有兩個(gè)方法,一個(gè)get,一個(gè)load,他們兩個(gè)參數(shù)相同,都返回一個(gè)Object
它們的區(qū)別:
執(zhí)行g(shù)et方法即時(shí)生成查詢sql去查詢數(shù)據(jù)庫(kù)得到相應(yīng)的pojo,如果數(shù)據(jù)庫(kù)中沒(méi)有相應(yīng)記錄,則返回null
執(zhí)行l(wèi)oad方法不會(huì)即時(shí)產(chǎn)生sql語(yǔ)句,而是在用到返回的對(duì)象時(shí)采取查詢數(shù)據(jù)庫(kù),也就是load方法有默認(rèn)的延遲加載,在執(zhí)行l(wèi)oad方法后返回的不是一個(gè)pojo對(duì)象,是pojo對(duì)象的一個(gè)代理(據(jù)說(shuō)Hibernate是用代理的方式實(shí)現(xiàn)延遲加載的,這塊還迷糊),如果數(shù)據(jù)庫(kù)中沒(méi)有相應(yīng)記錄,load方法會(huì)拋出異常ObjectNotFoundException
看了一下我們用MyEclipse hibernate工具通過(guò)數(shù)據(jù)庫(kù)生成的DAO類,它的findById方法是用的session.get()方法,這是即時(shí)獲得pojo對(duì)象,如果是load方法,在執(zhí)行完load后如果關(guān)閉了session,那在接下來(lái)用到這個(gè)pojo對(duì)象時(shí)恐怕會(huì)報(bào)session已關(guān)閉的錯(cuò)誤。
還有就是這兩個(gè)方法的第二個(gè)參數(shù)id,它必須是實(shí)現(xiàn)了java.io.Serializable接口,也就是可序列化的。
今天好像是立冬,冬天到了,抓緊時(shí)間充充電,明天接著學(xué)...
posted on 2008-11-07 10:15 豬 閱讀(1989) 評(píng)論(2) 編輯 收藏 所屬分類: 學(xué)習(xí)java