Hibernate知识问答
1.Hibernate的檢索方式
答:①導航對象圖檢索? ②OID檢索? ③HQL檢索? ④QBC檢索? ⑤本地SQL檢索
2. Forward與Global-Forward的區(qū)別
答:Forward是根據(jù)Action return的值找到對應的JSP頁。當多個Action共同return同一個值時,可將這個Forward元素寫在Global-Forward中。
3.持久化對象的三種狀態(tài),代表含義。
答: 臨時狀態(tài)——剛用new語句創(chuàng)建,未被持久化,不處于session的緩存中。
?????? ?持久化狀態(tài)——已經(jīng)被持久化,處于session的緩存中。
?????? ?游離態(tài)——已經(jīng)被持久化,但不處于session的緩存中。
4、三種檢索策略是什么,分別適用于哪種場合?
答:立即檢索——
優(yōu)點:對應用程序完全透明,缺點:select語句數(shù)目多。適用:類級別。
延遲檢索——
優(yōu)點: 由應用程序決定加載哪些對象,可以避免執(zhí)行多余的select語句以及避免加載不需要訪問的對象,節(jié)省內(nèi)存空間,提高檢索效率。
缺點: 應用程序如果要訪問游離態(tài)的代理類實例,必須保證它在持久化時已經(jīng)被初始化。
適用: 一對多或多對多關聯(lián)。應用程序不需要立即訪問或者根本不會訪問的對象。
迫切左外連接檢索:
優(yōu)點:對應用程序完全透明,不管對象處于持久化狀態(tài)還是游離狀態(tài),應用程序都可以方便的從一個對象導航到另一個與它相關聯(lián)的對象。使用了外連接,select語句數(shù)目少。
缺點:可能會加載程序不許要訪問的對象。復雜的數(shù)據(jù)庫表連接形象檢索性能。
適用:一對一或多對一關聯(lián)。應用程序需要立即訪問的對象。數(shù)據(jù)庫系統(tǒng)具有良好的表連接性能。
4、ORM解決的不匹配問題(域模型與關系模型之間存在的不匹配)
答: 域模型是面向對象的,關系模型是面向關系的。
域模型中有繼承關系,關系模型中不能直接表示繼承關系。
域模型中有多對多關聯(lián)關系,關系模型中通過連接表來表示多對多關聯(lián)關系。
域模型中有雙向關聯(lián)關系,關系模型中只有單向參照關系,而且總是many參照one方。
域模型提倡精粒度模型,關系模型提倡粗粒度模型。
5、映射繼承關系的三種方式?P 424
答:(1)繼承關系樹的每個具體類對應一張表:在具體類對應的表中,不僅包含和具體類屬性對應的字段,還包括與具體類的父類屬性對應的字段。
(2)繼承關系樹的根類對應一張表:在根類對應的表中,不僅包括根類屬性對應的字段,
還包括根類的所有子類屬性對應的字段。
(3)繼承關系樹中的每個類對應一張表,每個表中只包括和這個類本身屬性對應的字段,子類的表參照父類對應的表。
6、Session的find()方法以及Query接口的區(qū)別。
答案Session類的find()方法以及Query接口都支持HQL檢索方式。這兩者的區(qū)別在于,前者只是執(zhí)行一些簡單HQL查詢語句的便捷方法,它不具有動態(tài)綁定參數(shù)的功能,而且在Hibernate3.x版本中,已經(jīng)淘汰了find()方法;而Query接口才是真正的HQL查詢接口,它提供了以上列出的各種查詢功能。
7.ibernate的配置文件(hibernate.properties)中 hibernate.show_sql=true/flase
在開發(fā)階和測試段應設置為()在發(fā)布階段應設置為();true\false
8.映射一對多雙向關聯(lián)關系中設置SET元素:
請寫出級聯(lián)保存和更新、級聯(lián)刪除應在set元素中需要設置那些子元素?(標明關系、避面重復執(zhí)行多余SQL語句)
Name? cascade? key column?? one-to-many? inverse
9.list要的實現(xiàn)類有那些? 并按照存儲結構、機制簡單的說一下。
LinkedList、ArryList、Vector。
LinkedList 采用鏈表數(shù)據(jù)結構、ArryList代表大小可變的數(shù)組。
Vector與ArryList功能比較相似,區(qū)別在于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)繼承關系樹的根類對應一張表:在根類對應的表中,不僅包括根類屬性對應的字段,還包括根類的所有子類屬性對應的字段。
(3)繼承關系樹中的每個類對應一張表,每個表中只包括和這個類本身屬性對應的字段,子類的表參照父類對應的表。
13. Session接口是Hibernate應用使用最廣泛的接口。Session也被稱為持久化管理器,它提供了和持久化相關的操作,如添加、更新、刪除、加載和查詢對象。
14.請簡述Session的特點有哪些?
答案:
(1)不是線程安全的,因此在設計軟件架構時,應該避免多個線程共享同一個Session實例。
(2)Session實例是輕量級的,所謂輕量級是指它的創(chuàng)建和銷毀不需要消耗太多的資源。這意味著在程序中可以經(jīng)常創(chuàng)建或銷毀Session對象,例如為每個客戶請求分配單獨的Session實例,或者為每個工作單元分配單獨的Session實例。
(3)在Session 中,每個數(shù)據(jù)庫操作都是在一個事務(transaction)中進行的,這樣就可以隔離開不同的操作(甚至包括只讀操作)。
12、Hibernate中采用XML文件來配置對象-關系映射的優(yōu)點有那些?
答案:Hibernate既不會滲透到上層域模型中,也不會滲透到下層數(shù)據(jù)模型中。軟件開發(fā)人員可以獨立設計域模型,不必強迫遵守任何規(guī)范。數(shù)據(jù)庫設計人員可以獨立設計數(shù)據(jù)模型,不必強迫遵守任何規(guī)范。對象-關系映射不依賴于任何程序代碼,如果需要修改對象-關系映射,只需修改XML文件,不需要修改任何程序,提高了軟件的靈活性,并且使維護更加方便。
13、在Hibernate應用中Java對象的狀態(tài)有哪些?
答案:
1臨時狀態(tài)(transient):剛剛用new語句創(chuàng)建,還沒有被持久化,不處于Session的緩存中。處于臨時狀態(tài)的Java對象被稱為臨時對象。
2持久化狀態(tài)(persistent):已經(jīng)被持久化,加入到Session的緩存中。處于持久化狀態(tài)的Java對象被稱為持久化對象。
3游離狀態(tài)(detached):已經(jīng)被持久化,但不再處于Session的緩存中。處于游離狀態(tài)的Java對象被稱為游離對象。
14、 敘述Session的緩存的作用
答案:
(1)減少訪問數(shù)據(jù)庫的頻率。應用程序從內(nèi)存中讀取持久化對象的速度顯然比到數(shù)據(jù)庫中查詢數(shù)據(jù)的速度快多了,因此Session的緩存可以提高數(shù)據(jù)訪問的性能。
(2)保證緩存中的對象與數(shù)據(jù)庫中的相關記錄保持同步。當緩存中持久化對象的狀態(tài)發(fā)生了變換,Session并不會立即執(zhí)行相關的SQL語句,這使得Session能夠把幾條相關的SQL語句合并為一條SQL語句,以便減少訪問數(shù)據(jù)庫的次數(shù),從而提高應用程序的性能。
15、 比較Hibernate的三種檢索策略優(yōu)缺點;
答案:
1立即檢索;
優(yōu)點:對應用程序完全透明,不管對象處于持久化狀態(tài),還是游離狀態(tài),應用程序都可以方便的從一個對象導航到與它關聯(lián)的對象;
缺點:1.select語句太多;2.可能會加載應用程序不需要訪問的對象白白浪費許多內(nèi)存空間;
2延遲檢索:
優(yōu)點:
由應用程序決定需要加載哪些對象,可以避免可執(zhí)行多余的select語句,以及避免加載應用程序不需要訪問的對象。因此能提高檢索性能,并且能節(jié)省內(nèi)存空間;
缺點:
應用程序如果希望訪問游離狀態(tài)代理類實例,必須保證他在持久化狀態(tài)時已經(jīng)被初始化;
3 迫切左外連接檢索
優(yōu)點:
1對應用程序完全透明,不管對象處于持久化狀態(tài),還是游離狀態(tài),應用程序都可以方便地沖一個對象導航到與它關聯(lián)的對象。
2使用了外連接,select語句數(shù)目少;
缺點:
1 可能會加載應用程序不需要訪問的對象,白白浪費許多內(nèi)存空間;2復雜的數(shù)據(jù)庫表連接也會影響檢索性能;
16、 多個事務并發(fā)運行時的并發(fā)問題有哪些?
答案 第一類丟失更新;臟讀;虛讀;不可重復讀;第二類丟失更新;
17、ORM解決的不匹配問題(域模型與關系模型之間存在的不匹配)
答: 域模型是面向對象的,關系模型是面向關系的。域模型中有繼承關系,關系模型中不能直接表示繼承關系。域模型中有多對多關聯(lián)關系,關系模型中通過連接表來表示多對多關聯(lián)關系。域模型中有雙向關聯(lián)關系,關系模型中只有單向參照關系,而且總是many參照one方。域模型提倡精粒度模型,關系模型提倡粗粒度模型。
18、session的清理和清空有什么區(qū)別?
session清理緩存是指按照緩存中對象的狀態(tài)的變化來同步更新數(shù)據(jù)庫;清空是session關閉;
19.請簡述Session的特點有哪些?
答案:
(1)不是線程安全的,因此在設計軟件架構時,應該避免多個線程共享同一個Session實例。
(2)Session實例是輕量級的,所謂輕量級是指它的創(chuàng)建和銷毀不需要消耗太多的資源。這意味著在程序中可以經(jīng)常創(chuàng)建或銷毀Session對象,例如為每個客戶請求分配單獨的Session實例,或者為每個工作單元分配單獨的Session實例。
(3)在Session 中,每個數(shù)據(jù)庫操作都是在一個事務(transaction)中進行的,這樣就可以隔離開不同的操作(甚至包括只讀操作)。
20. 如下圖?? A、B、C請 添上字段,通過 表C建立? 表 A 、表B 的雙向關系? (要求簡單連線)???
?
????????????????????????????????????????????????????????????????????? 表B??
| ? | ? | ? |
| ? | ? | ? |
| ? | ? | ? |
?????????????? 表?? A????????????????????????????????????????????????????????????????????????????????????????????????????????????
| ? | ? | ? |
| ? | ? | ? |
| ? | ? | ? |
?
?
?
???????????????????????????????????????????????? ?????? 表C???
| ? | ? | ? |
| ? | ? | ? |
| ? | ? | ? |
?
總結
以上是生活随笔為你收集整理的Hibernate知识问答的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作与生活平衡(2)运动也需要执行力
- 下一篇: 6.6纪念永远的badboy