Hibernate面试题

2025年3月16日 | 6分钟阅读

之所以会问Hibernate面试题,是因为它是广泛使用的ORM工具。以下是为初学者和专业人士准备的20个最重要的Hibernate面试题及答案。


1) 什么是Hibernate?

Hibernate是一个开源的、轻量级的ORM工具,用于从数据库存储、操作和检索数据。

更多详情...

2) 什么是ORM?

ORM是Object/Relational Mapping的首字母缩写。它是一种将对象映射到数据库中存储的数据的编程策略。它简化了数据创建、数据操作和数据访问。


3) 请解释Hibernate架构?

Hibernate架构包含许多接口,如Configuration、SessionFactory、Session、Transaction等。

更多详情... hibernate框架架构

4) Hibernate的核心接口有哪些?

Hibernate框架的核心接口是

  • 配置
  • SessionFactory
  • Session
  • 查询
  • 标准
  • 交易

5) 与JDBC相比,使用ORM有什么优点?

与JDBC相比,ORM具有以下优点

  • 应用程序开发速度快。
  • 事务管理。
  • 自动生成键。
  • 隐藏了SQL查询的细节。

6) 在Hibernate的上下文中,定义Criteria。

Criteria对象用于创建和执行面向对象的Criteria查询。


7) 列举Hibernate支持的一些数据库。

Hibernate支持的一些数据库是

  • DB2
  • MySQL
  • Oracle
  • Sybase SQL Server
  • Informix Dynamic Server
  • HSQL
  • PostgreSQL
  • FrontBase

8) 列出Hibernate的关键组件。

Hibernate的关键组件是

  • 配置
  • Session
  • SessionFactory
  • 标准
  • 查询
  • 交易

9) 提及Hibernate配置对象的两个组件。

数据库连接

类映射设置


10) 如何在Hibernate中创建SQL查询?

SQL查询是使用以下语法创建的

Session.createSQLQuery


11) HQL代表什么?

Hibernate查询语言


12) 如何创建HQL查询?

HQL查询是使用以下语法创建的

Session.createQuery


13) 如何向SQL查询添加Criteria?

通过使用Session.createCriteria可以向SQL查询添加Criteria。


14) 定义持久化类。

对象存储在数据库表中的类称为持久化类。



15) 什么是SessionFactory?

SessionFactory提供Session的实例。它是Session的工厂。它持有二级缓存的数据,该缓存默认未启用。

更多详情...

16) SessionFactory是线程安全的吗?

是的,SessionFactory是线程安全的。多个线程不能同时访问它。


17) 什么是Session?

它维护Hibernate应用程序和数据库之间的连接。

它提供了从数据库存储、更新、删除或获取数据的方法,例如persist()、update()、delete()、load()、get()等。

它是Query、Criteria和Transaction的工厂,即它提供工厂方法来返回这些实例。

更多详情...

18) Session是线程安全的吗?

不,Session不是线程安全的。多个线程可以同时访问它。换句话说,你可以在线程之间共享它。


19) session.save()和session.persist()方法有什么区别?

编号。save()persist()
1)返回实例的标识符(Serializable)。不返回任何内容,因为它的返回类型是void。
2)签名:public Serializable save(Object o)签名:public void persist(Object o)

20) get和load方法有什么区别?

get()和load()方法之间的区别如下。

编号。get()load()
1)如果找不到对象,则返回null如果找不到对象,则抛出ObjectNotFoundException
2)get()方法总是命中数据库load()方法不命中数据库。
3)它返回真实对象,而不是代理。它返回代理对象。
4)如果不确定实例是否存在,则应使用它。如果确定实例存在,则应使用它。

21) update和merge方法有什么区别?

update()和merge()方法之间的区别如下。

编号。update()方法merge()方法
1)Update表示编辑某项。Merge表示合并某项。
2)如果Session不包含具有相同ID的已持久化状态,则应使用update()。这意味着update()只能在Session内部使用。关闭Session后,它将抛出错误。如果不知道Session的状态,则应使用merge(),意味着你想在任何时候进行修改。

让我们通过下面的例子来理解这个区别

关闭session1后,e1处于分离状态。它不会在session1缓存中。因此,如果调用update()方法,它将抛出错误。

然后,我们打开另一个Session并加载相同的Employee实例。如果在session2中调用merge,e1的更改将合并到e2中。


22) Hibernate中的对象有哪些状态?

Hibernate中的对象(实例)有3种状态。

  1. 瞬态(Transient):如果对象刚刚创建,但没有主键(标识符)且未与Session关联,则对象处于瞬态。
  2. 持久化(Persistent):如果Session是打开的,并且你刚刚将实例保存到数据库或从数据库检索了实例,则对象处于持久化状态。
  3. 分离(Detached):如果Session已关闭,则对象处于分离状态。在分离状态之后,如果调用lock()或update()方法,对象会进入持久化状态。

23) 有哪些继承映射策略?

Hibernate中有3种继承映射方式。

  1. 每层一张表
  2. 每个具体类一张表
  3. 每个子类一张表
更多详情...

24) 如何在Hibernate中创建不可变类?

如果将类标记为mutable="false",则该类将被视为不可变类。默认情况下,它是mutable="true"。


25) 什么是Hibernate中的自动脏检查?

Hibernate的自动脏检查功能会在事务中修改过的对象上自动调用update语句。

让我们通过下面的例子来理解它

在这里,在获取employee实例e1后,我们正在更改e1的状态。

更改状态后,我们提交事务。在这种情况下,状态将自动更新。这就是Hibernate中的脏检查。


26) Hibernate中可以实现多少种关联映射?

Hibernate可以实现4种类型的关联映射。

  1. 一对一
  2. 一对多
  3. 多对一
  4. 多对多

27) 可以使用一对一和多对一进行集合映射吗?

不,集合映射只能与一对多和多对多进行。


28) 什么是Hibernate中的懒加载?

Hibernate中的懒加载通过按需加载子对象来提高性能。

自Hibernate 3起,默认启用懒加载,您无需设置lazy="true"。这意味着在加载父对象时不要加载子对象。


29) 什么是HQL(Hibernate查询语言)?

Hibernate查询语言被称为面向对象的查询语言。它类似于结构化查询语言(SQL)。

HQL相对于SQL的主要优点是

  1. 您无需学习SQL
  2. 数据库独立
  3. 查询编写简单

30) 一级缓存和二级缓存有什么区别?

编号。一级缓存二级缓存
1)一级缓存与Session关联二级缓存与SessionFactory关联
2)默认启用默认未启用