Java面試-Hibernate總結,java面試-hibernate
1 Hibernate的檢索方式
Ø 導航對象圖檢索(根據已經載入的對象,導航到其他對象。)
Ø OID檢索(按照對象的OID來檢索對象。)
Ø HQL檢索(使用物件導向的HQL查詢語言。)
Ø QBC檢索(使用QBC(Qurey By Criteria)API來檢索對象。QBC/QBE離線/線上)
Ø 本地SQL檢索(使用本機資料庫的SQL查詢語句。)
http://blog.csdn.net/lenotang/article/details/2596680
2 Hibernate中對象的狀態
Ø 臨時狀態(transient):剛剛用new語句建立,還沒有被持久化,不處於Session的緩衝中。處於臨時狀態的Java對象被稱為臨時對象。
Ø 持久化狀態(persistent):已經被持久化,加入到Session的緩衝中。處於持久化狀態的Java對象被稱為持久化對象。
Ø 游離狀態(detached):已經被持久化,但不再處於Session的緩衝中。處於游離狀態的Java對象被稱為游離對象。
http://blog.csdn.net/communicate_/article/details/8452786
3 Hibernate的3種檢索策略是什麼,分別適用於哪種場合
Ø 立即檢索
優點:對應用程式完全透明。
缺點:select語句數目多。
適用:類層級。
Ø 延遲檢索
優點:由應用程式決定載入哪些對象,可以避免執行多餘的select語句以及避免載入不需要訪問的對象,節省記憶體空間,提高檢索效率。
缺點:應用程式如果要訪問游離態的代理類執行個體,必須保證它在持久化時已經被初始化。
適用:一對多或多對多關聯。應用程式不需要立即訪問或者根本不會訪問的對象。
Ø 迫切左外串連檢索
優點:對應用程式完全透明,不管對象處於持久化狀態還是游離狀態,應用程式都可以方便的從一個對象導航到另一個與它相關聯的對象。使用了外串連,select語句數目少。
缺點:可能會載入程式不許要訪問的對象。複雜的資料庫表串連形象檢索效能。
適用:一對一或多對一關聯。應用程式需要立即訪問的對象。資料庫系統具有良好的表串連效能。
http://blog.csdn.net/adoocoke/article/details/8291966
4 ORM解決的不匹配問題(領域模型與關聯式模式之間存在的不匹配)
Ø 領域模型是物件導向的,關聯式模式是面向關係的。
Ø 領域模型中有繼承關係,關聯式模式中不能直接表示繼承關係。
Ø 領域模型中有多對多關聯關係,關聯式模式中通過串連表來表示多對多關聯關係。
Ø 領域模型中有雙向關聯關係,關聯式模式中只有單向參照關係,而且總是many參照one方。
Ø 領域模型提倡精粒度模型,關聯式模式提倡粗粒度模型。
5 Hibernate映射繼承關係的3種方式
Ø 整個的繼承體系就用一張表(tableper hierarchy)
Ø 每個子類一張表,存放子類所特有的屬性(tableper subclass)
Ø 每個具體類一張表(union-subclass),儲存是子類完整資訊(table per concrete )
http://blog.csdn.net/yanwushu/article/details/7680765
6 Session的find()方法以及Query介面的區別
Session類的find()方法以及Query介面都支援HQL檢索方式。這兩者的區別在於,前者只是執行一些簡單HQL查詢語句的便捷方法,它不具有動態綁定參數的功能,而且在Hibernate3.x版本中,已經淘汰了find()方法;而Query介面才是真正的HQL查詢介面,它提供了以上列出的各種查詢功能。
7 Hibernate關聯關係配置
Ø 一對一
Ø 一對多
Ø 多對多
http://blog.csdn.net/lrain0813/article/details/5756015
8 簡述Session的特點
Ø 不是安全執行緒的,因此在設計軟體架構時,應該避免多個線程共用同一個Session執行個體。
Ø Session執行個體是輕量級的,所謂輕量級是指它的建立和銷毀不需要消耗太多的資源。這意味著在程式中可以經常建立或銷毀Session對象,例如為每個客戶請求分配單獨的Session執行個體,或者為每個工作單元分配單獨的Session執行個體。
Ø 在Session中,每個資料庫操作都是在一個事務(transaction)中進行的,這樣就可以隔離開不同的操作(甚至包括唯讀操作)。
9 Hibernate中採用XML檔案來設定物件-關係映射的優點
Hibernate既不會滲透到上層領域模型中,也不會滲透到下層資料模型中。軟體開發人員可以獨立設計領域模型,不必強迫遵守任何規範。資料庫設計人員可以獨立設計資料模型,不必強迫遵守任何規範。對象-關係映射不依賴於任何程式碼,如果需要修改對象-關係映射,只需修改XML檔案,不需要修改任何程式,提高了軟體的靈活性,並且使維護更加方便。
http://blog.csdn.net/it_man/article/details/1477317
10 Session的緩衝的作用
Ø 減少訪問資料庫的頻率。應用程式從記憶體中讀取持久化對象的速度顯然比到資料庫中查詢資料的速度快多了,因此Session的緩衝可以提高資料訪問的效能。
Ø 保證緩衝中的對象與資料庫中的相關記錄保持同步。當緩衝中持久化對象的狀態發生了變換,Session並不會立即執行相關的SQL語句,這使得Session能夠把幾條相關的SQL語句合并為一條SQL語句,以便減少訪問資料庫的次數,從而提高應用程式的效能。
11 多事務並行執行階段的問題
Ø 第一類丟失更新
Ø 髒讀
Ø 虛讀/幻讀
Ø 不可重複讀取
Ø 第二類丟失更新
http://www.iteye.com/topic/791346
12 session的清理和清空的區別
Ø session清理緩衝是指按照緩衝中對象的狀態的變化來同步更新資料庫;(Hibernate包含了三類session的Flush模式)
Ø 清空是session清除部分或全部對象或者session關閉;
http://blog.sina.com.cn/s/blog_62a151be0100nf28.html
13 Hibernate工作原理及為什麼要用
Ø 原理
1.讀取並解析設定檔
2.讀取並解析映射資訊,建立SessionFactory
3.開啟Sesssion
4.建立事務Transation
5.持久化操作
6.提交事務
7.關閉Session
8.關閉SesstionFactory
Ø 為什麼要用
1.對JDBC訪問資料庫的代碼做了封裝,大大簡化了資料訪問層繁瑣的重複性代碼。
2.Hibernate是一個基於JDBC的主流持久化架構,是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工作
3.hibernate使用Java反射機制,而不是位元組碼增強程式來實現透明性。
4.hibernate的效能非常好,因為它是個輕量級架構。映射的靈活性很出色。它支援各種關聯式資料庫,從一對一到多對多的各種複雜關係。
http://www.cnblogs.com/shanmu/p/3598477.html
14 Hibernate消極式載入
1.Hibernate2消極式載入實現:a)實體物件 b) 集合類型(Collection)
2.Hibernate3 提供了屬性的消極式載入功能
當Hibernate在查詢資料的時候,資料並沒有存在與記憶體中,當程式真正對資料的操作時,對象才存在與記憶體中,就實現了消極式載入,他節省了伺服器的記憶體開銷,從而提高了伺服器的效能。
http://blog.163.com/xi_zh_qi/blog/static/8501594200812695053939/
15 Hibernate的緩衝機制
1.一級緩衝又叫內部緩衝存在Hibernate,屬於應用事務級緩衝
2.二級緩衝
a) 應用及緩衝
b) 分布式緩衝
條件:資料不會被第三方修改、資料大小在可接受範圍、資料更新頻率低、同一資料被系統頻繁使用、非關鍵資料。
c) 第三方緩衝的實現
http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html
16 最佳化Hibernate
1.使用雙向一對多關聯,不使用單向一對多
2.靈活使用單向一對多關聯
3.不用一對一,用多對一取代
4.設定物件緩衝,不使用集合緩衝
5.一對多集合使用Bag,多對多集合使用Set
6.繼承類使用顯式多態
7.表欄位要少,表關聯不要怕多,有二級緩衝撐腰
http://blog.csdn.net/sprita1/article/details/9289971
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。