hibernate session加載實體對象時,將通過哪些過程?

1. 首先,Hibernate中維持了兩級緩存。     第一級:由session實例維護,其中保持了session當前全部關聯實體的數據,也成爲內部緩存。     第二級:由當前全部本SessionFactory構造的Session實例共享。     Session在調用數據庫查詢功能以前,會先在緩存中進行查詢。首先在第一級緩存中,經過實體類型和id進行查找,     若是第一級緩存查找命中,且數據狀態合法,則直接返回。 2. 以後,Session會在當前「NonExists」記錄中進行查找,若是「NonExists」記錄中存在一樣的查詢條件,則返回null。      「NonExists」記錄了當前Session實例在以前全部查詢操做中,未能查詢到有效數據的查詢條件(至關於查詢黑名單)。 3. 對於load方法而言,若是內部緩存中未發現有效數據,則查詢第二級緩存,若是第二級緩存命中,則返回。 4. 若是在緩存中未發現有效數據,則發起數據庫查詢操做,若是通過查詢未發現對應記錄,則將這次查詢的信息在「NonExists」中加以記錄,並返回null。 5. 根據映射配置和Select SQL獲得的ResultSet,建立對應數據對象。 6. 將其數據對象歸入當前Session實體管理容器(一級緩存)。 7. 執行Interceptor.onLoad方法(若是有對應的Interceptor)。 8. 將數據對象歸入二級緩存。 9. 若是數據對象實現了LifeCycle接口,則調用數據對象的onLoad方法。 10. 返回數據對象。
相關文章
相關標籤/搜索