50 个最热门的 Hibernate 面试问题 (2025)

以下是 Hibernate 面试问题和答案,可帮助应届毕业生和有经验的应聘者获得理想的工作。


1.什么是Hibernate?

Hibernate 是一个流行的 Java 框架,它允许使用 XML 格式的配置文件进行高效的对象关系映射。将 Java 对象映射到数据库表后,无需编写复杂的数据库查询即可使用和处理数据库。

免费 PDF 下载:Hibernate 面试问题和答案


2.什么是ORM?

ORM(对象关系映射)是 Hibernate 框架的基本概念,它将数据库表与 Java 对象进行映射,然后提供各种 API对数据表执行不同类型的操作。


3. 在 Hibernate 中,类的属性如何映射到数据库表的列?

类属性和表列之间的映射在 XML 文件如下例所示:


4.hibernate中配置接口有什么用?

Hibernate框架的配置接口用于配置Hibernate。它还用于 引导 hibernate.使用此接口来定位hibernate的映射文档。


5.如何使用新的自定义接口来增强hibernate内置接口的功能?

我们可以使用扩展接口来添加内置接口不支持的任何所需功能。

Hibernate 面试题
Hibernate 面试题

6. 所有hibernate映射文件是否都要带有.hbm.xml扩展名才能正常工作?

不,使用 .hbm.xml 扩展名是一种惯例,而不是 Hibernate 映射文件名的要求。我们可以为这些映射文件使用任何扩展名。


7. 如何在 Hibernate 中创建会话工厂?

休眠面试问题
过冬

要在 Hibernate 中创建会话工厂,首先要创建一个引用配置文件路径的配置对象,然后针对该配置创建会话工厂,如下例所示:

Configuration config = new Configuration();
config.addResource("myinstance/configuration.hbm.xml");
config.setProperties( System.getProperties() );
SessionFactory sessions = config.buildSessionFactory();

8.什么是POJO,其意义是什么?

POJO(普通旧式 Java 对象)是针对每个属性具有适当的 getter 和 setter 方法的 Java bean。
使用 POJO 而不是简单的 java 类可以得到高效且结构良好的代码。


9.什么是HQL?

HQL 是 Hibernate 中使用的查询语言,它是 SQL。HQL 是一种非常高效、简单且灵活的查询语言,可以在关系数据库上执行各种类型的操作,而无需编写复杂的数据库查询。


10. 如何在 Hibernate 中调用存储过程?

在 Hibernate 中我们可以使用如下代码执行存储过程:


11. 什么是标准 API?

Criteria 是 Hibernate 的一个简单但功能强大的 API,用于通过标准对象组合来检索实体。


12.使用Hibernate模板有什么好处?

以下是使用 Hibernate 模板的一些主要好处:
a. 会话自动关闭。
b.简化了与 Hibernate 会话的交互。
c. 异常处理自动化。


13. 如何在控制台上看到 Hibernate 生成的 SQL?

我们需要在 Hibernate 配置文件中添加以下内容以便在控制台上查看 SQL 以进行调试:


14. Hibernate 中有哪两种类型的集合?

以下是 Hibernate 中的两种集合类型:

  1. 排序集合
  2. 订单收集


15. Hibernate中session.save()和session.saveOrUpdate()方法有什么区别?

Sessionsave() 方法 仅当记录相对于其主键唯一时才保存记录,如果表中已存在主键,则插入失败。
saveOrUpdate() 方法 如果主键唯一,则插入新记录,如果表中已存在主键,则更新现有记录。


16. Hibernate 相比于 数据库连接?

  • Hibernate 可以与任何类型的数据库无缝使用,因为它独立于数据库,而对于 JDBC,开发人员必须编写特定于数据库的查询。
  • 使用 Hibernate,开发人员不需要成为编写复杂查询的专家,因为 HQL 简化了查询编写过程,而对于 JDBC,开发人员的工作是编写和调整查询。
  • 对于 Hibernate,不需要创建连接池,因为 Hibernate 会自动完成所有连接处理;而对于 JDBC,则需要创建连接池。

17. 如何获取 Hibernate 统计数据?

我们可以使用 SessionFactory 类的 getStatistics() 方法获取 Hibernate 统计数据,如下所示:

SessionFactory.getStatistics()

18. Hibernate 中的瞬态实例状态是什么?

如果一个实例没有与任何持久上下文相关联,并且它从未与任何持久上下文相关联,那么它就处于瞬态。


19. 我们如何减少 Hibernate 中的数据库写入操作时间?

Hibernate 提供了脏检查功能,可用于减少数据库写入时间。Hibernate 的脏检查功能仅更新需要更改的字段,同时保持其他字段不变。


20.hibernate中回调接口有什么用?

hibernate的回调接口在接收对象的事件通知时很有用。例如,当加载或删除一个对象时,就会产生一个事件,并使用回调接口发送通知。


21. 实例在休眠状态下何时进入分离状态?

当一个实例先前与某个持久上下文(例如,一个表)相关联并且不再关联时,它被称为处于分离状态。


22. Hibernate 中的四个 ORM 级别是什么?

以下是 Hibernate 中的四个 ORM 级别:

  • 纯关系型
  • 灯光对象映射
  • 中型物体映射
  • 完整对象映射

23. Hibernate 中的事务管理是什么?它是如何工作的?

事务管理是管理一组语句或命令的过程。在 Hibernate 中,事务管理通过事务接口完成,如下面的代码所示:

Session s = null;
Transaction tr = null;
try {
s = sessionFactory.openSession();
tr = s.beginTransaction();
doTheAction(s);
tr.commit();
} catch (RuntimeException exc) {
tr.rollback();
} finally {
s.close();
}

24. Hibernate 配置有哪两种方法?

我们可以使用下面两种hibernate配置方法中的任意一种:

  1. 基于 XML 的配置(使用 hibernate.cfg.xml 文件)
  2. 程序化配置(使用代码逻辑)

25.hibernate的默认缓存服务是什么?

Hibernate支持多种缓存服务,如EHCache,OSCache,SWARMCache和TreeCache,其中Hibernate的默认缓存服务是EHCache。


26.hibernate中使用到的两种映射关联是什么?

在 Hibernate 中,实体之间有以下两种类型的映射关联:

  1. 一对一关联
  2. 多对多关联

27. Hibernate QBC API 有什么用途?

Hibernate 按条件查询 (QBC) API 用于通过在运行时操作条件对象来创建查询。


28. 在 Hibernate 中,有多少种方法可以从数据库获取对象?

Hibernate 提供以下四种从数据库获取对象的方法:

  • 使用 HQL
  • 使用标识符
  • 使用 Criteria API
  • 使用标准 SQL

29.如何使用 Hibernate 创建主键?

数据库主键在配置文件 hbm.xml 中指定。生成器还可用于指定如何在数据库中创建主键。
在以下示例中,deptId 充当主键:


30. 如何在 Hibernate 中重新连接任何已分离的对象?

可以通过调用会话类的 session.merge() 方法重新连接已分离且不再与任何持久实体关联的对象。


31. 有哪些不同的方法可以禁用 Hibernate 二级缓存?

可以使用以下任一方式禁用 Hibernate 二级缓存:

  • 通过将 use_second_level_cache 设置为 false。
  • 通过使用 CACHEMODE.IGNORE
  • 使用缓存提供程序作为 org.hibernate.cache.NoCacheProvider

32. 什么是 ORM 元数据?

类和表、属性和列、Java 类型和 SQL 类型等之间的所有映射都在 ORM 元数据中定义。


33. Hibernate中默认的事务工厂是哪一个?

在 Hibernate 3.2 中,默认事务工厂是 JDBCTransactionFactory。


34. JMX在hibernate中起什么作用?

Java 应用程序和组件在 Hibernate 中由名为 JMX API 的标准 API 进行管理。JMX 提供了用于开发高效、强大的基于 Web 的分布式解决方案的工具。


35. 我们如何将 Hibernate 会话工厂绑定到 JNDI?

可以通过在 hibernate.cfg 文件中进行配置更改将 Hibernate 会话工厂绑定到 JNDI。


36. 在 Hibernate 中,有多少种方法可以识别对象?

在 Hibernate 中可以通过以下三种方式进行对象识别:

  • 使用对象标识:使用 == 运算符。
  • 使用对象相等性:使用 equals() 方法。
  • 使用数据库标识:如果关系数据库对象代表同一行,则可以识别它们。

37. Hibernate 有哪些不同的抓取策略?

Hibernate 中有以下几种可用的获取策略:

  1. 连接获取
  2. 批量获取
  3. 选择获取
  4. 子选择抓取

38. 如何实现 Java 对象与数据库表的映射?

要将 Java 对象与数据库表进行映射,我们需要让 Java bean 属性名称与数据库表的列名称相同。然后在 hbm.xml 文件中提供映射,如下所示:


39. Hibernate 中的派生属性是什么?

派生属性是那些未映射到数据库表的任何列的属性。此类属性在运行时通过评估任何表达式来计算。


40. Hibernate 中的命名 SQL 查询是什么意思以及如何使用它?

命名 SQL 查询是在映射文件中定义并在任何地方根据需要调用的查询。
例如,我们可以在 XML 映射文件中编写如下 SQL 查询:

然后可以按如下方式调用该查询:

List students = session.getNamedQuery("studentdetails")
.setString("TomBrady", name)
.setMaxResults(50)
.list();

41. Hibernate中load()和get()方法有什么区别?

如果在数据库中找不到所需的记录,则 Load() 方法会导致异常,而如果在数据库中找不到针对 id 的记录,则 get() 方法将返回 null。
因此,理想情况下,只有当我们确定存在针对某个 id 的记录时,我们才应该使用 Load() 方法。


42. Hibernate 中的 version 属性有什么用?

在 Hibernate 中,版本属性用于了解对象是处于瞬态还是分离状态。


43.什么是面向属性编程?

在面向属性编程中,开发人员可以在 Java 源代码中添加元数据(属性),以在代码中增加更多意义。对于 Java(hibernate),面向属性编程由名为 XDoclet 的引擎启用。


44. hibernate中session.lock()有什么用?

session 类的 session.lock() 方法用于重新附加先前已分离的对象。此重新附加方法在重新附加对象时不会检查数据库中的任何数据同步,因此可能导致数据缺乏同步。


45.hibernate支持多态吗?

是的,hibernate完全支持多态,hibernate所有的映射策略都支持多态查询和多态关联。


46.hibernate的三种继承模型分别是哪三种?

Hibernate有以下三种继承模型:

  1. 每个具体类的表
  2. 每个类的层次结构都包含一个表
  3. 每个子类的表格

47.我们如何将类映射为不可变的?

如果我们不希望应用程序更新或删除 Hibernate 中某个类的对象,我们可以通过设置 mutable=false 使该类不可变


48. 使用 RDBMS 的一般 Hibernate 流程是怎样的?

涉及 RDBMS 的一般 Hibernate 流程如下:

  • 加载配置文件并创建配置类对象。
  • 使用配置对象,创建 sessionFactory 对象。
  • 从 sessionFactory 获取一个会话。
  • 创建 HQL 查询。
  • 执行HQL查询并获取结果。结果将以列表的形式显示。

49.什么是光对象映射?

轻对象映射是 ORM 质量级别之一,其中所有实体都表示为类并手动映射。


50. 管理关联和休眠关联有什么区别?

管理关联与容器管理持久性相关并且是双向的,而休眠关联是单向的。


这些面试问题也会对你的口试有帮助

分享

4条评论

  1. 头像 纳伦德拉 说:

    很好的问答集…

  2. 头像 Bipil Raut-软件开发人员 说:

    很好的解释,,,,

  3. 您还可以添加以下问题吗

    我们如何在 Hibernate 中调用存储过程?
    什么是有序集合和排序集合
    什么是持久状态
    如何配置脏检查
    配置回调接口
    如何使物体分离
    如果我分离瞬时对象会发生什么
    解释 Hibernate 中的每个 ORM 级别
    如何启用/禁用一级和二级缓存
    我们如何将 Hibernate 会话工厂绑定到 JNDI?
    Hibernate中load()和get()方法有什么区别?
    session.lock() 和 session.merge() 之间的区别
    如何将类映射为不可变的以及原因
    如何使用新的自定义接口来增强Hi​​bernate内置接口的功能?

    1. 头像 梅胡尔·帕特尔 说:

      嘿,管理员,如果你添加这个问题或更重要的多项选择题(如竞争性考试的问题),那将会很有成效

发表评论

您的电邮地址不会被公开。 必填项 *