1. get和load區(qū)別
load加載方法: Java代碼 Users user = (Users)session.load(Users.class, new Integer(1)); Users user = (Users)session.load(Users.class, new Integer(1)); get加載方法: Java代碼 Users user = (Users)session.get(Users.class, new Integer(1)); Users user = (Users)session.get(Users.class, new Integer(1)); 以上面代碼為例: 區(qū)別一:如果沒(méi)有id為1的Users對(duì)象,那么,如果通過(guò)get方法加載,則返回的是一個(gè)null,如果通過(guò)load加載,則返回一個(gè)代理對(duì)象,如果后面代碼如果調(diào)用user對(duì)象的某個(gè)屬性(比如user.getPassword())會(huì)拋出異常:org.hibernate.ObjectNotFoundException 區(qū)別二:load支持延遲加載,get不支持延遲加載 也就是說(shuō):Users user = (Users)session.load(Users.class, new Integer(2));這句代碼不會(huì)去執(zhí)行數(shù)據(jù)庫(kù)查詢,只有用到user時(shí)才會(huì)去執(zhí)行數(shù)據(jù)庫(kù)查詢,而Users user = (Users)session.get(Users.class, new Integer(1));則立即去執(zhí)行數(shù)據(jù)庫(kù)查詢。 所以Users user = (Users)session.load(Users.class, new Integer(2));不會(huì)執(zhí)行任何sql. 緩存加載--get支持一級(jí)緩存。load支持二級(jí)緩存。不查詢數(shù)據(jù)庫(kù)只是到緩存中提取數(shù)據(jù)。緩存沒(méi)有然后轉(zhuǎn)至數(shù)據(jù)庫(kù)。load 一級(jí)轉(zhuǎn)二級(jí)然后至數(shù)據(jù)庫(kù),數(shù)據(jù)變化小性能會(huì)高些。 延遲加載是在提取關(guān)聯(lián)對(duì)象的時(shí)候才有效果! |
|