下了個Hibernate視頻教程聽,雖然一年多以前跟老師學過Hibernate,但現在聽聽還是有很多收獲的,發現自己的知識知道的都是些皮毛,用了很久的東西,知道怎么操作怎么用,但要說說它的所以然,搖搖頭,呵呵
根據主鍵Id得到一個持久對象,Hibernate中有兩個方法,一個get,一個load,他們兩個參數相同,都返回一個Object
它們的區別:
執行get方法即時生成查詢sql去查詢數據庫得到相應的pojo,如果數據庫中沒有相應記錄,則返回null
執行load方法不會即時產生sql語句,而是在用到返回的對象時采取查詢數據庫,也就是load方法有默認的延遲加載,在執行load方法后返回的不是一個pojo對象,是pojo對象的一個代理(據說Hibernate是用代理的方式實現延遲加載的,這塊還迷糊),如果數據庫中沒有相應記錄,load方法會拋出異常ObjectNotFoundException
看了一下我們用MyEclipse hibernate工具通過數據庫生成的DAO類,它的findById方法是用的session.get()方法,這是即時獲得pojo對象,如果是load方法,在執行完load后如果關閉了session,那在接下來用到這個pojo對象時恐怕會報session已關閉的錯誤。
還有就是這兩個方法的第二個參數id,它必須是實現了java.io.Serializable接口,也就是可序列化的。
今天好像是立冬,冬天到了,抓緊時間充充電,明天接著學...