1、當(dāng)數(shù)據(jù)庫不存在對應(yīng)ID數(shù)據(jù)時,調(diào)用load()方法將會拋出ObjectNotFoundException異常,get()方法將返回null,我比較喜歡使用get()方法。
2、當(dāng)對象.hbm.xml配置文件<class>元素的lazy屬性設(shè)置為true時,調(diào)用load()方法時則返回持久對象的代理類實例,此時的代理類實例是由運行時動態(tài)生成的類,該代理類實例包括原目標(biāo)對象的所有屬性和方法,該代理類實例的屬性除了ID不為null外,所在屬性為null值,查看日志并沒有Hibernate SQL輸出,說明沒有執(zhí)行查詢操作,當(dāng)代理類實例通過getXXX()方法獲取屬性值時,Hiberante才真正執(zhí)行數(shù)據(jù)庫查詢操作。當(dāng)對象.hbm.xml配置文件<class>元素的lazy屬性設(shè)置為false時,調(diào)用load()方法則是立即執(zhí)行數(shù)據(jù)庫并直接返回實體類,并不返回代理類。而調(diào)用get()方法時不管lazy為何值,都直接返回實體類。
3、load()和get()都會先從Session緩存中查找,如果沒有找到對應(yīng)的對象,則查詢Hibernate二級緩存,再找不到該對象,則發(fā)送一條SQL語句查詢。