天天看點

Hibernate知識問答

1.Hibernate的檢索方式

答:①導航對象圖檢索 ②OID檢索 ③HQL檢索 ④QBC檢索 ⑤本地SQL檢索

2. Forward與Global-Forward的差別

答:Forward是根據Action return的值找到對應的JSP頁。當多個Action共同return同一個值時,可将這個Forward元素寫在Global-Forward中。

3.持久化對象的三種狀态,代表含義。

答: 臨時狀态——剛用new語句建立,未被持久化,不處于session的緩存中。

持久化狀态——已經被持久化,處于session的緩存中。

遊離态——已經被持久化,但不處于session的緩存中。

4、三種檢索政策是什麼,分别适用于哪種場合?

答:立即檢索——

優點:對應用程式完全透明,缺點:select語句數目多。适用:類級别。

延遲檢索——

優點: 由應用程式決定加載哪些對象,可以避免執行多餘的select語句以及避免加載不需要通路的對象,節省記憶體空間,提高檢索效率。

缺點: 應用程式如果要通路遊離态的代理類執行個體,必須保證它在持久化時已經被初始化。

适用: 一對多或多對多關聯。應用程式不需要立即通路或者根本不會通路的對象。

迫切左外連接配接檢索:

優點:對應用程式完全透明,不管對象處于持久化狀态還是遊離狀态,應用程式都可以友善的從一個對象導航到另一個與它相關聯的對象。使用了外連接配接,select語句數目少。

缺點:可能會加載程式不許要通路的對象。複雜的資料庫表連接配接形象檢索性能。

适用:一對一或多對一關聯。應用程式需要立即通路的對象。資料庫系統具有良好的表連接配接性能。

4、ORM解決的不比對問題(域模型與關系模型之間存在的不比對)

答: 域模型是面向對象的,關系模型是面向關系的。

域模型中有繼承關系,關系模型中不能直接表示繼承關系。

域模型中有多對多關聯關系,關系模型中通過連接配接表來表示多對多關聯關系。

域模型中有雙向關聯關系,關系模型中隻有單向參照關系,而且總是many參照one方。

域模型提倡精粒度模型,關系模型提倡粗粒度模型。

5、映射繼承關系的三種方式?P 424

答:(1)繼承關系樹的每個具體類對應一張表:在具體類對應的表中,不僅包含和具體類屬性對應的字段,還包括與具體類的父類屬性對應的字段。

(2)繼承關系樹的根類對應一張表:在根類對應的表中,不僅包括根類屬性對應的字段,

還包括根類的所有子類屬性對應的字段。

(3)繼承關系樹中的每個類對應一張表,每個表中隻包括和這個類本身屬性對應的字段,子類的表參照父類對應的表。

6、Session的find()方法以及Query接口的差別。

答案Session類的find()方法以及Query接口都支援HQL檢索方式。這兩者的差別在于,前者隻是執行一些簡單HQL查詢語句的便捷方法,它不具有動态綁定參數的功能,而且在Hibernate3.x版本中,已經淘汰了find()方法;而Query接口才是真正的HQL查詢接口,它提供了以上列出的各種查詢功能。

7.ibernate的配置檔案(hibernate.properties)中 hibernate.show_sql=true/flase

在開發階和測試段應設定為()在釋出階段應設定為();true\false

8.映射一對多雙向關聯關系中設定SET元素:

請寫出級聯儲存和更新、級聯删除應在set元素中需要設定那些子元素?(标明關系、避面重複執行多餘SQL語句)

Name cascade key column one-to-many inverse

9.list要的實作類有那些? 并按照存儲結構、機制簡單的說一下。

LinkedList、ArryList、Vector。

LinkedList 采用連結清單資料結構、ArryList代表大小可變的數組。

Vector與ArryList功能比較相似,差別在于Vector采用同步、ArryList沒有采用。

10:以下哪個不是Hibernate的檢索方式:

A、導航對象圖檢索 B、OID檢索 C、ORM檢索

D、QBC檢索 E、本地SQL檢索 F、HQL檢索

答案:C

11.持久化類的類名是Customer.java,寫出相應的映射檔案名 。

答案:Customer.hbm.xml

12.繼承的三種方式

(1)繼承關系樹的每個具體類對應一張表:在具體類對應的表中,不僅包含和具體類屬性對應的字段,還包括與具體類的父類屬性對應的字段。

(2)繼承關系樹的根類對應一張表:在根類對應的表中,不僅包括根類屬性對應的字段,還包括根類的所有子類屬性對應的字段。

13. Session接口是Hibernate應用使用最廣泛的接口。Session也被稱為持久化管理器,它提供了和持久化相關的操作,如添加、更新、删除、加載和查詢對象。

14.請簡述Session的特點有哪些?

答案:

(1)不是線程安全的,是以在設計軟體架構時,應該避免多個線程共享同一個Session執行個體。

(2)Session執行個體是輕量級的,所謂輕量級是指它的建立和銷毀不需要消耗太多的資源。這意味着在程式中可以經常建立或銷毀Session對象,例如為每個客戶請求配置設定單獨的Session執行個體,或者為每個工作單元配置設定單獨的Session執行個體。

(3)在Session 中,每個資料庫操作都是在一個事務(transaction)中進行的,這樣就可以隔離開不同的操作(甚至包括隻讀操作)。

12、Hibernate中采用XML檔案來配置對象-關系映射的優點有那些?

答案:Hibernate既不會滲透到上層域模型中,也不會滲透到下層資料模型中。軟體開發人員可以獨立設計域模型,不必強迫遵守任何規範。資料庫設計人員可以獨立設計資料模型,不必強迫遵守任何規範。對象-關系映射不依賴于任何程式代碼,如果需要修改對象-關系映射,隻需修改XML檔案,不需要修改任何程式,提高了軟體的靈活性,并且使維護更加友善。

13、在Hibernate應用中Java對象的狀态有哪些?

1臨時狀态(transient):剛剛用new語句建立,還沒有被持久化,不處于Session的緩存中。處于臨時狀态的Java對象被稱為臨時對象。

2持久化狀态(persistent):已經被持久化,加入到Session的緩存中。處于持久化狀态的Java對象被稱為持久化對象。

3遊離狀态(detached):已經被持久化,但不再處于Session的緩存中。處于遊離狀态的Java對象被稱為遊離對象。

14、 叙述Session的緩存的作用

(1)減少通路資料庫的頻率。應用程式從記憶體中讀取持久化對象的速度顯然比到資料庫中查詢資料的速度快多了,是以Session的緩存可以提高資料通路的性能。

(2)保證緩存中的對象與資料庫中的相關記錄保持同步。當緩存中持久化對象的狀态發生了變換,Session并不會立即執行相關的SQL語句,這使得Session能夠把幾條相關的SQL語句合并為一條SQL語句,以便減少通路資料庫的次數,進而提高應用程式的性能。

15、 比較Hibernate的三種檢索政策優缺點;

1立即檢索;

優點:對應用程式完全透明,不管對象處于持久化狀态,還是遊離狀态,應用程式都可以友善的從一個對象導航到與它關聯的對象;

缺點:1.select語句太多;2.可能會加載應用程式不需要通路的對象白白浪費許多記憶體空間;

2延遲檢索:

優點:

由應用程式決定需要加載哪些對象,可以避免可執行多餘的select語句,以及避免加載應用程式不需要通路的對象。是以能提高檢索性能,并且能節省記憶體空間;

缺點:

應用程式如果希望通路遊離狀态代理類執行個體,必須保證他在持久化狀态時已經被初始化;

3 迫切左外連接配接檢索

1對應用程式完全透明,不管對象處于持久化狀态,還是遊離狀态,應用程式都可以友善地沖一個對象導航到與它關聯的對象。

2使用了外連接配接,select語句數目少;

1 可能會加載應用程式不需要通路的對象,白白浪費許多記憶體空間;2複雜的資料庫表連接配接也會影響檢索性能;

16、 多個事務并發運作時的并發問題有哪些?

答案 第一類丢失更新;髒讀;虛讀;不可重複讀;第二類丢失更新;

17、ORM解決的不比對問題(域模型與關系模型之間存在的不比對)

答: 域模型是面向對象的,關系模型是面向關系的。域模型中有繼承關系,關系模型中不能直接表示繼承關系。域模型中有多對多關聯關系,關系模型中通過連接配接表來表示多對多關聯關系。域模型中有雙向關聯關系,關系模型中隻有單向參照關系,而且總是many參照one方。域模型提倡精粒度模型,關系模型提倡粗粒度模型。

18、session的清理和清空有什麼差別?

session清理緩存是指按照緩存中對象的狀态的變化來同步更新資料庫;清空是session關閉;

19.請簡述Session的特點有哪些?

20. 如下圖 A、B、C請 添上字段,通過 表C建立 表 A 、表B 的雙向關系 (要求簡單連線)

                                                                                                                                    表B

表 A

表C

本文轉自linzheng 51CTO部落格,原文連結:http://blog.51cto.com/linzheng/1080795