20 個最常見的 Hibernate 面試問題和答案 [適合新手和有經驗的人]
已發表: 2020-12-31長期以來,Java 在最流行的編程語言列表中一直位居前列。 自然地,作為全球開發人員首選的高優先級編程語言,Java 伴隨著大量的工具、庫和框架。 在這篇文章中,我們將討論一個流行的 Java 框架 Hibernate。
任何使用過或使用過 Java 的人都非常了解 Hibernate 及其強大功能。 但是,讓我們為那些剛剛遇到這個名字的人分解它 - Hibernate。
目錄
什麼是休眠?
Hibernate 是專為 Java 設計的 ORM(對象關係映射)工具。 換句話說,它提供了一個框架來幫助將面向對象的模型映射到關係數據庫。 Hibernate 主要關注從 Java 類到數據庫表的映射以及從 Java 數據類型到SQL數據類型的映射。
Hibernate 還擴展了數據查詢和檢索服務。 它是用 Java 編寫的,並且是基於 JVM 的。 Hibernate 提供了 Java Persistence API 的參考實現,這使其成為 ORM(對象關係映射)的絕佳選擇。 我們可以使用 Hibernate 持久化 API 進行 CRUD 操作
最初,Hibernate 旨在作為 EJB2(Enterprise Java Beans 版本 2)的更簡單和更好的替代品。 今天,Hibernate 號稱是 Java 應用程序中使用最廣泛的 ORM 工具之一。
它廣泛用於為數據庫操作開發基於 Java 的企業應用程序。 此外,Hibernate Persistence API 非常適合 CRUD 操作。

現在你已經有了一些 Hibernate 的背景知識,讓我們通過這些 X Hibernate 面試問題來更好地了解這個 ORM 工具!
報名參加世界頂尖大學的軟件開發課程。 獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。
Hibernate 面試問答
1.什麼是ORM?
ORM(對象關係映射)是指一種將對象與存儲在數據庫中的數據進行映射的技術。 ORM 的目的是簡化數據創建、數據訪問和數據操作。
2.什麼是JPA?
Java Persistence API (JPA) 是一種將標準和功能分配給 ORM 工具的規範。 您可以從javax.persistence包中訪問 JPA 類和接口。 所有 JPA 規範都是使用 javax.persistence 包中的註釋定義的。 使用 JPA 註釋的優點是它們允許您編寫獨立於實現的代碼。
3.用於Hibernate Mapping的重要JPA註解有哪些?
Hibernate 支持 JPA 註釋以及您可以通過 org.hibernate.annotations 包訪問的許多其他註釋。 以下是七個最重要的 JPA 註釋:
javax.persistence.Entity – 它與模型類結合使用,以將它們聲明為實體 bean。
javax.persistence.Table – 它與實體 bean 一起用於在數據庫中定義相應的表名。
javax.persistence.Access – 用於指定訪問類型、字段或屬性。 此註釋的默認值為 field。
javax.persistence.Id - 它定義實體 bean 中的主鍵。
javax.persistence.EmbeddedId – 用於指定實體 bean 中的複合主鍵。
javax.persistence.Column – 它指定數據庫表中的列名。
javax.persistence.GeneratedValue - 它定義了生成主鍵所需的策略。
4.定義HQL
HQL 代表休眠查詢語言。 它是一種面向對象的查詢語言,獨立於數據庫。
5. 你將如何在 Hibernate 中執行映射?
Hibernate 的關聯映射特性通過支持四種標準關聯來促進映射,這與關係數據庫模型的關聯:
- 一對一關聯
- 一對多關聯
- 多對一關聯
- 多對多關聯
這些關聯中的每一個都可以映射為單向或雙向關聯。
6.命名Hibernate的主要接口/組件。
Hibernate 有六個核心接口——Configuration、SessionFactory、Session、Query、Criteria 和 Transaction。

7.你可以在Hibernate中創建一個SQL查詢嗎?
是的,您可以在 Hibernate 中創建 SQL 查詢。 要創建 SQL 查詢,您必須使用以下語法:
Session.createSQLQuery
8.什麼是Hibernate配置文件?
Hibernate 配置文件存儲特定於數據庫的配置。 它用於初始化 SessionFactory 接口。 該文件還包含其他相關信息,例如方言信息,它允許 Hibernate 了解數據庫類型和映射文件/類的詳細信息。
9.什麼是持久類?
在 Hibernate 中,其對象和實例存儲在數據庫類中的類稱為持久類。
10.定義會話
Session 接口位於 Hibernate 和 Java 應用層之間。 它主要用於執行數據庫操作。 會話有助於建立和維護 Hibernate 應用程序和數據庫之間的連接。 它提供了不同的方法來執行持久對象的創建、讀取、更新和刪除操作。
此外,Session 就像 Query、Criteria 和 Transaction 的工廠,這意味著它擴展了工廠方法以返回這些實例。 您可以使用 Session 對象來創建條件並執行 HQL 查詢和 SQL 原生查詢。
11.定義會話工廠。
在 Hibernate 中,SessionFactory 是用於訪問 Session 對象的工廠類。 它讀取 Hibernate 配置參數並連接到數據庫以獲取 Session 對象。 SessionFactory 本質上是 Session 的工廠,它提供了 Session 的實例。
一旦創建了 SessionFactory,它的內部狀態就固定了,使其不可變。 SessionFactory 的內部狀態包含了 Object/Relational Mapping 的完整元數據。
12.Hibernate配置文件和Hibernate映射文件的區別。
Hibernate 配置文件包括特定於數據庫的配置和方言信息。 它用於初始化 SessionFactory。 您可以從 Hibernate 配置 XML 文件訪問數據庫憑據或 JNDI 資源信息。
另一方面,Hibernate 映射文件用於定義數據庫表列映射和實體 bean 字段。 映射文件是每個 Hibernate 應用程序的核心。 它包含從 POJO 類名到表名和 POJO 類變量名到表列名的映射。
13.什麼是POJO?
POJO 是 Plain Old Java Object 的首字母縮寫詞。 本質上,POJO 是為單個屬性設計了標準 getter 和 setter 方法的 java bean。 使用 POJO 代替 Java 類的優點是可以編寫乾淨、精確和高效的代碼。
14.命名 Hibernate 配置對象的關鍵組件。
Hibernate 配置對像有兩個關鍵組件
- 由一個或多個配置文件管理的數據庫連接。
- 類映射設置,用於建立 Java 類和數據庫表之間的連接。
15.什麼是休眠方言?
Hibernate Dialect 指定您希望使用的數據庫類型。 它允許 Hibernate 提前知道此信息以生成最適合您首選/指定數據庫類型的適當 SQL 語句。
16.定義“休眠緩存”。
Hibernate 緩存是查詢數據以提高 Hibernate 應用程序的速度和性能的過程。 目的是盡量減少數據庫查詢的數量,從而減少吞吐時間。
EHCache 是 Hibernate 的默認緩存功能。
17.什麼是一級緩存和二級緩存?
在 Hibernate 中,一級緩存指的是 Session 緩存。 它是所有請求必須通過的強制緩存。 第二個緩存是一個可選的緩存,用於跨會話緩存對象。
您可以基於預收集和每個類配置二級緩存。 作為一般規則,在嘗試在二級緩存中定位對象之前,必須先查詢一級緩存。
18.解釋對象/實體bean的不同階段。
一個對象/實體 bean 實例通常存在於以下三個階段中的任何一個階段:
- 瞬態——在這個階段,一個對象永遠不會持續存在或與任何會話相關聯。 您可以使用 save()、persist() 或 saveOrUpdate() 函數將瞬態實例轉換為持久實例。 要將持久實例恢復為瞬態,可以使用 delete() 命令。
- 持久– 對像在與唯一會話關聯時達到持久狀態。 get() 或 load() 函數返回的所有實例都處於持久狀態。
- Detached – 當持久對像不與任何會話關聯時,它會達到分離狀態。 您可以通過 update()、saveOrUpdate()、lock() 或 replicate() 函數將分離的實例轉換為持久實例。
19.Hibernate中Dirty Check的目的是什麼?
Hibernate 的自動臟檢查功能自動對事務中修改的對象調用更新語句,從而幫助開發人員避免耗時的寫入操作。

臟檢查僅修改/更新需要操作的字段,同時保持其他字段不變。 總體而言,它減少了數據庫寫入時間。
20. 定義“事務管理”。
事務管理是 Spring 框架的一個特性。 它基本上是管理一組命令/語句的過程。 在 Hibernate 中,事務接口通過維護事務實現(JTA、JDBC)的抽象來執行事務管理。 您可以通過調用session.beginTransaction()方法來啟動事務。
另請閱讀:Java 面試問答
結論
總結一下,儘管這 20 個 Hibernate 面試問題只涉及到問題的表面,但我們希望這能幫助您打破 Hibernate 的僵局並深入挖掘它!
我們祝愿您在 Java 中開始您的職業生涯一切順利!
