1. 程式人生 > >JAVA企業面試題精選 Hibernate 11-20

JAVA企業面試題精選 Hibernate 11-20

4.11.簡要描述對物件關係對映(Object-Relational Mapping,簡稱ORM)的理解.並說明經典實現框架.

參考答案:

  物件關係對映(Object-Relational Mapping,簡稱ORM)是一種為了解決面向物件與面向關係資料庫存在的互不匹配現象的技術;簡單的說,ORM是通過使用描述物件和資料庫之間對映的元資料,將Java程式中的物件自動持久化到關係資料庫中;本質上就是將資料從一種形式轉換到另外一種形式.
  經典的ORM實現框架有Hibernate和MyBatis.

4.12.Hibernate有哪5個核心介面?

參考答案:

  Hibernate有以下五個核心介面:
  1.Configuration 負責載入主配置檔案資訊,同時也載入對映關係檔案資訊.
  2.SessionFactory 負責建立Session物件.
  3.Session 資料庫連線會話,負責執行增刪改操作.
  4.Transaction 負責事務控制.
  5.Query 負責執行特殊查詢.

4.13.關於Hibernate:

  1.在Hibernate中,在配置檔案呈現一對多,對對多的標籤是什麼?

  2.Hibernate是如何處理事務的?

參考答案:

  1.一對多的標籤為<one-to-many>

;多對多的標籤為<many-to-many>;
  2.Hibernate的事務實際上是底層的JDBC Transaction的封裝或者是JTATransaction的封裝;預設情況下使用JDBCTransaction.

4.14.簡單說手session.load()和session.get()的區別,哪種方法可以使用二級快取?

參考答案:

  session.load()和session.get()的區別為:
  1.get不支援延遲載入,而load支援.換句話說,get方法一定獲取實際的物件,而load有可能返回代理物件.
  2.如果未能發現符合條件的記錄,get方法返回null,而load方法會丟擲一個ObjectNotFoundException.
  get方法和load方法都可以使用二級快取.

4.15.簡述update和saveOrUpdate方法的區別

參考答案:

  update方法跟新資料時,如果不存在該條資料的主鍵則會報錯;saveOrUpdate方法儲存或更新,如果不存在主鍵則執行插入.

4.16.JDBC,Hibernate分頁怎樣實現?

參考答案:

  1.Hibernate實現分頁的方式如下:

Query query = session.createQuery("from Student");
query.setFirstResult(firstResult);//設定每頁開始的記錄號
query.setMaxResults(resultNumber);//設定每頁顯示的記錄數
Collection students = query.list();
    
  • 1
  • 2
  • 3
  • 4

  上述程式碼中的集合students中某也要獲取的資料.
  2.JDBC實現分頁的方式如下:
  根據不同的資料庫採用不同的SQL分頁語句,例如Oracle中的SQL語句為:

SELECT * FROM (SELECT a.*, rownum r FROM TB_STUDENT) WHERE r between 2 and 10;
    
  • 1

  上述查詢語句,查詢了從記錄號2到記錄號10之間的所有記錄.將上述SQL語句使用JDBC進行執行,即可得到分頁後資料.

4.17.Hibernate中物件有哪幾種狀態,有什麼規則?

參考答案:

  Hibernate中UI系那個可以看做有3中狀態,分別是臨時狀態,持久化狀態,遊離狀態,這些狀態可以相互轉換,轉換規則如下圖:
這裡寫圖片描述
  具體各個狀態的特徵為:
  1.臨時狀態
    1)臨時狀態的物件可以被垃圾回收;
    2)臨時狀態的物件為進行過持久化,未與session關聯.
  2.持久化狀態
    1)持久化狀態物件垃圾回收器不能回收;
    2)持久化狀態的物件進行了持久化,與session相關聯,即持久化狀態就想存在於session快取中,由session負責管理;
    3)持久化狀態物件的資料可以自動更新到資料庫中,時機是在呼叫session.flush()時執行.而提交事務時會呼叫session.flush(),因此提交事務時也會觸發同步,可以理解為ts.commit=session.flush()+commit.
  3.遊離狀態
    1)遊離狀態的物件可以被垃圾回收;
    2)遊離狀態的物件進行過持久化,但已與session解除了關聯.

4.18.Hibernate中哪些查詢方法具有延遲載入機制

參考答案:

  1.session.load();
  2.query.iterate();
  3.關聯對映中對關聯屬性的載入.

4.19.Hibernate中有幾種型別的關聯對映?

參考答案:

  Hibernate中的關聯對映有如下幾種:
  1)一對一關聯
  2)一對多關聯
  3)多對一關聯
  4)多對多關聯

4.20.Hibernate有哪幾種查詢方式?

參考答案:

  Hibernate有如下幾種查詢方式
  1)使用API查詢,如get,load
  2)使用HQL查詢
  3)使用SQL查詢
  4)使用Criteria查詢

4.21.請簡述Hibernate一級快取和二級快取的區別和聯絡

參考答案:

  一級快取是Session級別的快取,由Session負責管理,因此一級快取是Session獨享的,即每個Session只能訪問自己的一級快取區.
  二級快取是SessionFactory級別的快取,由SessionFactory負責管理,因此二級快取是Session間共享的,即不同的Session都可以訪問二級快取區.
  一級快取和二級快取相同的地方是,他們快取的都是物件資料.

4.11.簡要描述對物件關係對映(Object-Relational Mapping,簡稱ORM)的理解.並說明經典實現框架.

參考答案:

  物件關係對映(Object-Relational Mapping,簡稱ORM)是一種為了解決面向物件與面向關係資料庫存在的互不匹配現象的技術;簡單的說,ORM是通過使用描述物件和資料庫之間對映的元資料,將Java程式中的物件自動持久化到關係資料庫中;本質上就是將資料從一種形式轉換到另外一種形式.
  經典的ORM實現框架有Hibernate和MyBatis.

4.12.Hibernate有哪5個核心介面?

參考答案:

  Hibernate有以下五個核心介面:
  1.Configuration 負責載入主配置檔案資訊,同時也載入對映關係檔案資訊.
  2.SessionFactory 負責建立Session物件.
  3.Session 資料庫連線會話,負責執行增刪改操作.
  4.Transaction 負責事務控制.
  5.Query 負責執行特殊查詢.

4.13.關於Hibernate:

  1.在Hibernate中,在配置檔案呈現一對多,對對多的標籤是什麼?

  2.Hibernate是如何處理事務的?

參考答案:

  1.一對多的標籤為<one-to-many>;多對多的標籤為<many-to-many>;
  2.Hibernate的事務實際上是底層的JDBC Transaction的封裝或者是JTATransaction的封裝;預設情況下使用JDBCTransaction.

4.14.簡單說手session.load()和session.get()的區別,哪種方法可以使用二級快取?

參考答案:

  session.load()和session.get()的區別為:
  1.get不支援延遲載入,而load支援.換句話說,get方法一定獲取實際的物件,而load有可能返回代理物件.
  2.如果未能發現符合條件的記錄,get方法返回null,而load方法會丟擲一個ObjectNotFoundException.
  get方法和load方法都可以使用二級快取.

4.15.簡述update和saveOrUpdate方法的區別

參考答案:

  update方法跟新資料時,如果不存在該條資料的主鍵則會報錯;saveOrUpdate方法儲存或更新,如果不存在主鍵則執行插入.

4.16.JDBC,Hibernate分頁怎樣實現?

參考答案:

  1.Hibernate實現分頁的方式如下:

Query query = session.createQuery("from Student");
query.setFirstResult(firstResult);//設定每頁開始的記錄號
query.setMaxResults(resultNumber);//設定每頁顯示的記錄數
Collection students = query.list();
  
  • 1
  • 2
  • 3
  • 4

  上述程式碼中的集合students中某也要獲取的資料.
  2.JDBC實現分頁的方式如下:
  根據不同的資料庫採用不同的SQL分頁語句,例如Oracle中的SQL語句為:

SELECT * FROM (SELECT a.*, rownum r FROM TB_STUDENT) WHERE r between 2 and 10;
  
  • 1

  上述查詢語句,查詢了從記錄號2到記錄號10之間的所有記錄.將上述SQL語句使用JDBC進行執行,即可得到分頁後資料.

4.17.Hibernate中物件有哪幾種狀態,有什麼規則?

參考答案:

  Hibernate中UI系那個可以看做有3中狀態,分別是臨時狀態,持久化狀態,遊離狀態,這些狀態可以相互轉換,轉換規則如下圖:
這裡寫圖片描述
  具體各個狀態的特徵為:
  1.臨時狀態
    1)臨時狀態的物件可以被垃圾回收;
    2)臨時狀態的物件為進行過持久化,未與session關聯.
  2.持久化狀態
    1)持久化狀態物件垃圾回收器不能回收;
    2)持久化狀態的物件進行了持久化,與session相關聯,即持久化狀態就想存在於session快取中,由session負責管理;
    3)持久化狀態物件的資料可以自動更新到資料庫中,時機是在呼叫session.flush()時執行.而提交事務時會呼叫session.flush(),因此提交事務時也會觸發同步,可以理解為ts.commit=session.flush()+commit.
  3.遊離狀態
    1)遊離狀態的物件可以被垃圾回收;
    2)遊離狀態的物件進行過持久化,但已與session解除了關聯.

4.18.Hibernate中哪些查詢方法具有延遲載入機制

參考答案:

  1.session.load();
  2.query.iterate();
  3.關聯對映中對關聯屬性的載入.

4.19.Hibernate中有幾種型別的關聯對映?

參考答案:

  Hibernate中的關聯對映有如下幾種:
  1)一對一關聯
  2)一對多關聯
  3)多對一關聯
  4)多對多關聯

4.20.Hibernate有哪幾種查詢方式?

參考答案:

  Hibernate有如下幾種查詢方式
  1)使用API查詢,如get,load
  2)使用HQL查詢
  3)使用SQL查詢
  4)使用Criteria查詢

4.21.請簡述Hibernate一級快取和二級快取的區別和聯絡

參考答案:

  一級快取是Session級別的快取,由Session負責管理,因此一級快取是Session獨享的,即每個Session只能訪問自己的一級快取區.
  二級快取是SessionFactory級別的快取,由SessionFactory負責管理,因此二級快取是Session間共享的,即不同的Session都可以訪問二級快取區.
  一級快取和二級快取相同的地方是,他們快取的都是物件資料.