Hibernate主要檢索策略主要有即時(shí)檢索, 延遲檢索, 批量檢索(batch-size), 迫切左外連接檢索(outer-join)。
即時(shí)檢索, 延遲檢索, 批量檢索分為類級(jí)別和級(jí)聯(lián)級(jí)別。
只有LOAD方法可以使用類級(jí)別的延遲檢索,get() 和 find()將忽略類級(jí)別的延遲檢索, 總使用即時(shí)檢索策略。
find()還同時(shí)忽略級(jí)聯(lián)級(jí)別的迫切左外連接檢索(一對(duì)多, 多對(duì)多情況下)。
LOAD()在類級(jí)別的延遲將建立一個(gè)代理對(duì)象。 set將一直設(shè)立一個(gè)代理對(duì)象(實(shí)現(xiàn)SET)然后用代理對(duì)象指向?qū)嶋H應(yīng)用。
HIBERNATE.PROPERTIES中的 maz-fetch-depth可以指定迫切左外連接的層次結(jié)構(gòu)。
如果不實(shí)用迫切左外連接, 則對(duì)每條級(jí)聯(lián)的檢索數(shù)據(jù)會(huì)產(chǎn)生一天SELECT語(yǔ)句, 這樣SELECT語(yǔ)句數(shù)目太多會(huì)影響性能, 但是外連接的過多, 會(huì)涉及到表與表之間的關(guān)聯(lián)等等, 需要 在SELECT數(shù)目與外連接上做一個(gè)權(quán)衡。
如果一個(gè)映射文件中有很多個(gè)SET, 只有一個(gè)SET 的OUTER-JOIN可以為TRUE(HIBERNATE實(shí)現(xiàn), 為了提高性能.
一般在類級(jí)別采用立即檢索, 在一對(duì)多, 或多對(duì)多情況下采用延遲檢索, 在一對(duì)一, 多對(duì)一下采用迫切左外連接檢索。
可以在代碼中指定檢索策略。
get()如果級(jí)聯(lián)的對(duì)象為空則返回NULL值。
為什么不才用SQL語(yǔ)言進(jìn)行檢索?
需要封裝成對(duì)象, 檢查內(nèi)存中有無重復(fù)的對(duì)象。
find()方法只能進(jìn)行靜態(tài)查詢, 將被QUERY接口所取代!