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