1. 程式人生 > >Hibernate面試題+答案

Hibernate面試題+答案

篇幅很長,請耐心閱讀和學習,希望對你有所幫助!

1.下面不屬於持久化的是( a)

A.把物件轉換為字串的形式通過網路傳輸,在另一端接收到這個字串後能把

物件還原出來

B.把程式資料從資料庫中讀出來

C.從XML配置檔案中讀取程式的配置資訊

D.把程式資料儲存為檔案

3.下面(a )不屬於 關係—物件 對映的對映資訊。

A.程式包名到資料庫庫名的對映

B.程式類名到資料庫表名的對映

C.實體屬性名到資料庫表字段的對映

D.實體屬性型別到資料庫表字段型別的對映

4. 使用Hibernate技術實現資料庫持久化時,(d)內容不在Hibernate配置檔案中。

    A.  資料庫連線資訊

    B.  資料庫型別

    C.  show_sql引數

D.  資料庫表和實體的對映資訊

5. 資料庫表account對應實體類為Account類,以下HQL語句錯誤的有( d)。

    A.  select * from Account

    B.  From Account

    C.  From Account as model

D.  Select * from account

6. 級聯刪除時,cascade屬性是( c  )。

    A.  all

    B.  save

    C.  delete

D.  save-update

7. 以下不屬於Cascade的屬性取值的有( b  )。

    A.  all

    B.  save

    C.  delete

D.  save-update

8. 關於HQL查詢,下列說法中錯誤的是( A )。

    A.  HQL查詢的select子句中必須區分大小寫

    B.  HQL支援統計函式

    C.  HQL支援僅查詢物件的某幾個屬性,並將查詢結果儲存在Object陣列中

D.  HQL語句可以實現類似於PreparedStatement的效果

9. 由持久化狀態向遊離狀態轉變的方法不包括( C)。

    A.  臨時狀態

    B.  無引用狀態

    C.  持久化狀態

D.  遊離狀態

10. 關於HQL與SQL,以下哪些說法正確?(B)。

    A.  HQL與SQL沒什麼差別

    B.  HQL面向物件,而SQL操縱關係資料庫

    C.  在HQL與SQL中,都包含select,insert,update,delete語句

D.  HQL僅用於查詢和刪除資料,不支援insert,update語句

11. 下面關於Hibernate說法正確的是(BD)。(選擇兩項)

    A.  Hibernate是ORM的一種實現方式

    B.  Hibernate不要JDBC的支援

    C.  屬於控制層

D.  屬於資料持久層

12. 下面關於Hibernate中load和get方法說法正確的是(D)。

    A.  這兩個方法是一樣的,沒有任何的區別

    B.  這兩個方法不一樣,laod先找快取,再找資料庫

    C.  這兩個方法不一樣,get先找快取,再找資料庫

D.  以上說法都不對

13. 關於Hibernate中關係的說話正確的是(A)。

    A.  一對多必須用Set來對映

    B.  多對一必須用Set來對映

    C.  一對多可以用Set來對映,也可以用List、Map來對映

D.  多對一可以用Set來對映,也可以用List、Map來對映

14. 以下關於SessionFactory的說法哪些正確?( C)。

    A.  對於每個資料庫事務,應該建立一個SessionFactory物件

    B.  一個SessionFactory物件對應多個數據庫儲存源

    C.  SessionFactory是重量級的物件,不應該隨意建立。如果系統中只有一個數據庫儲存源,只需要建立一個

D.  SessionFactory的load()方法用於載入持久化物件

15. 在使用了Hibernate的系統中,要想在刪除某個客戶資料的同時刪除該客戶對應的所有訂單資料,下面方法可行的是(A)。

    A.  配置客戶和訂單關聯的cascade屬性為save-update

    B.  配置客戶和訂單關聯的cascade屬性為all

    C.  設定多對一關聯的inverse屬性為true

D.  設定多對一關聯的inverse屬性為false

16

在三層結構中,資料訪問層承擔的責任是()

a)定義實體類

b)資料的增刪改查操作

c)業務邏輯的描述

d)頁面展示和控制轉發

17

下面關於資料持久化概念的描述,錯誤的是()〔選擇一項〕

a)儲存在記憶體中資料的狀態是瞬時狀態

b)持久狀態的資料在關機後資料依然存在

c)資料可以由持久狀態轉換為瞬時狀態

d)將資料轉換為持久狀態的機制稱為資料持久化

18.下面( ab)不是Hibernate 對映檔案中包含的內容。(選兩項)

A.資料庫連線資訊

B.Hibernate 屬性引數

C.主鍵生成策略

D.屬性資料型別

19. Hibernate物件從臨時狀態到持久狀態轉換的方式有?( A)。

    A.  呼叫session的save方法

    B.  呼叫session的close方法

    C.  呼叫session的clear方法

D.  呼叫session的evict方法

20

下面關於Hibernate的說法,錯誤的是()〔選擇一項〕

a) 

Hibernate是一個”物件-關係對映”的實現

b) 

Hibernate是一種資料持久化技術

c) 

Hibernate是JDBC的替代技術

d) 

使用Hibernate可以簡化持久化層的編碼

21

Hibernate配置檔案中,不包含下面的()〔選擇二項〕

a) 

“物件-關係對映”資訊

b) 

實體間關聯的配置

c) 

show_sql等引數的配置

d) 

資料庫連線資訊

21

下面不是Hibernate對映檔案中包含的內容。(選兩項)

a) 

資料庫連線資訊

b) 

Hibernate屬性引數

c) 

主鍵生成策略·

d) 

屬性資料型別

22

在使用了Hibernate的系統中,要想在刪除某個客戶資料的同時刪除該客戶對應的所有訂單資料,下面方法可行的是()。〔選擇一項〕

a) 

配置客戶和訂單關聯的cascade屬性為save-update

b) 

配置客戶和訂單關聯的cascade屬性為all

c) 

設定多對一關聯的inverse屬性為true

d) 

設定多對一關聯的inverse屬性為false

23

以下程式的列印結果是什麼?

tx = session.beginTransaction();
Customer c1=(Customer)session.load(Customer.class,new Long(1));
Customer c2=(Customer)session.load(Customer.class,new Long(1));
System.out.println(c1==c2);
tx.commit();
session.close();

a) 

執行出錯,丟擲異常

b) 

列印false

c) 

列印true

d) 

編譯出錯

24

對於以下程式,Customer物件在第幾行變為持久化狀態?(單選)
Customer customer=new Customer();  
customer.setName(\”Tom\”);  
Session session1=sessionFactory.openSession();  
Transaction tx1 = session1.beginTransaction();  //line1
session1.save(customer);  //line2變為持久化
tx1.commit();  //line3
session1.close(); //line4
變為遊離態

a) 

line1

b) 

line2

c) 

line3

d) 

line4

25

ORM有什麼好處

a) 

能進行關係物件的對映

b) 

具有控制器功能

c) 

能在伺服器端儲存客戶端狀態

d) 

向DTO一項能傳遞資料

26

過程域物件在Hibernate中代表

a) 

業務邏輯操作

b) 

應用層操作

c) 

資料庫層操作

d) 

元件物件操作

27

使用Session的____會把物件的狀態從資料庫中移除

a) 

delete()

b) 

remove()

c) 

clear()

d) 

removeAll()

5.下列屬於多對一關係的是(bd )。(選兩項)

A.書和作者

B.手機和生產廠家

C.使用者和釋出的出租資訊

D士兵

在set節點中設定”outer-join=”true””,當呼叫Session的find方法時採用( C)。

    A.  立即檢索

    B.  延遲檢索

    C.  迫切左外連線檢索

D.  批量檢索

以下哪一種檢索策略利用了外連結查詢?(單選)

a) 

立即檢索  

b) 

延遲檢索  

c) 

迫切左外連結檢索

d) 

迫切右外連結檢索

43. 下面關於Hibernate中Transaction的使用說法正確的是(B)。

    A.  Transaction是可有可無的

    B.
Transaction在做查詢的時候是可選的

    C.  Transaction在做刪除的時候是可選的

D.  Transaction在做修改的時候是可選的

23)

POJO是

a) 

Plain Old Java Object

b) 

Programming Object Java Object

c) 

Page Old Java Object

d) 

Plain Object Java Old

24)

POJO的作用是

a) 

普通的Java物件對映資料庫欄位

b) 

資料訪問

c) 

物件的賦值

d) 

儲存客戶端物件

25)

實現equals和hashCode最顯而易見的作用是

a) 

比較兩個物件識別符號的值

b) 

比較資料庫的兩條資料

c) 

比較兩個組建是否部署在同一個應用伺服器上

d) 

物件與欄位的對映

33)

JDBC可以做哪三件事

a) 

與資料庫建立連線

b) 

通過JDBC-API向資料庫傳送SQL語句

c) 

通過JDBC-API執行SQL語句

d) 

進行實體關係的對映

38)

物件(實體的例項)對一個特定的Session來說,要麼是一個____物件,要麼是____物件

a) 

瞬時

b) 

持久化

c) 

控制器

d) 

資料傳輸物件

39)

如果你已知某個例項的持久化標識,你可以使用Session的______方法來獲取它

a) 

load()

b) 

loadAll()

c) 

getAllData() 

d) 

init() 

44)

____和____子句都不支援算數表示式。

a) 

group   by 

b) 

order    by 

c) 

compute   by

d) 

insert    by

45)

除了____和____外,查詢語句都是大小寫不敏感得到。

a) 

Java類

b) 

POJO類

c) 

對映檔案

d) 

屬性名稱

46)

from Cat as cat,不僅僅返回____的例項,而且還返回____的例項

a) 

Cat

b) 

Cat父類

c) 

Cat子類

d) 

Cat實現介面

54)

在Hibernate中,關於資料庫的方言,下面哪個說法是正確的

a) 

可以不寫資料庫方言

b) 

資料庫方言沒有作用,可以隨便寫

c) 

有通用的資料庫方言可以使用

d) 

資料方言對應於每個資料庫,主要用於產生SQL語句

57)

下面的程式執行後沒有報錯,但資料總儲存不到資料庫,最可能的原因是

public static void imain(String[] args){

    SessionFactory sf=new Configration().configure().buildSessionFactory();

    Session session=sf.openSession();

    Medal medal=new Medal();

    medal.setOwner(“totong”);

    medal.setType(“Gold medal”);

    session.save(user);

    session.close();

}

a) 

配置檔案配置有誤

b) 

沒有在配置檔案中包含對對映檔案的宣告

c) 

配置檔案配置有誤

d) 

沒有對持久化操作捕捉異常

e) 

沒有開啟事務

59)

已知wage.getItem().size()的值是1。要想使執行session.update(wage)時自動執行session.update(wage.getItems().get(0)),必須配置

a) 

<set name=”items” inverse=”true” cascade=”none”>…</set>

b) 

<set name=”items” inverse=”false” cascade=”none”>…</set>

c) 

<set name=”items” inverse=”true” cascade=”all”>…</set>

d) 

<set name=”items” inverse=”false” cascade=”save-update”>…</set>

60)

已知系統中的tbl_user表對應的實體類是User,下列HQL語句中正確的是(選兩項)

a) 

from User

b) 

select * from tbluser 

c) 

select User from User 

d) 

from User u where u.uname=”15″

問答題

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)繼承關係樹的根類對應一張表:在根類對應的表中,不僅包括根類屬性對應的欄位,還包括根類的所有子類屬性對應的欄位。

(3)繼承關係樹中的每個類對應一張表,每個表中只包括和這個類本身屬性對應的欄位,子類的表參照父類對應的表。

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的特點有哪些?

答案:

(1)不是執行緒安全的,因此在設計軟體架構時,應該避免多個執行緒共享同一個Session例項。

(2)Session例項是輕量級的,所謂輕量級是指它的建立和銷燬不需要消耗太多的資源。這意味著在程式中可以經常建立或銷燬Session物件,例如為每個客戶請求分配單獨的Session例項,或者為每個工作單元分配單獨的Session例項。

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

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

                                                                      表B  

               表   A                                                                                                            

                                                        表C