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 配置对象有两个关键组件

  1. 由一个或多个配置文件管理的数据库连接。
  2. 类映射设置,用于建立 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 中开始您的职业生涯一切顺利!

踏上梦想的工作

立即申请软件工程硕士