JPA Interview Questions

JPA 面试问题

16 Mar 2025 | 阅读 11 分钟

下面列出了最常问的 JPA 面试问题和答案

1) 什么是 Java 持久化 API?

Java 持久化 API (JPA) 是 Java 的规范,用于在 Java 对象和关系数据库之间持久化数据。JPA 充当面向对象领域模型和关系数据库系统之间的桥梁。由于 JPA 只是一个规范,它本身不执行任何操作。它需要一个实现。因此,Hibernate、TopLink 和 iBatis 等 ORM 工具实现了 JPA 规范以进行数据持久化。Java 持久化 API 的第一个版本 JPA 1.0 于 2006 年发布,作为 EJB 3.0 规范的一部分。


2) JPA 执行访问、持久化和管理数据等实际任务吗?

不,JPA 只是一个规范。Hibernate、iBatis 和 TopLink 等 ORM 工具实现了 JPA 规范并执行这些类型的任务。


3) 什么是对象关系映射?

对象关系映射是一种通过将对象状态映射到数据库列来开发和维护对象与关系数据库之间关系的一种机制。它将编程代码的属性转换为表的列。它能够轻松处理各种数据库操作,例如插入、更新、删除等。

JPA Object Relational Mapping

4) JPA 有哪些优点?

JPA 的优点如下。

  • 使用 JPA 可以显著减少与数据库交互的负担。
  • 通过隐藏 O/R 映射和数据库访问处理,用户编程变得容易。
  • 通过使用注解,可以降低创建定义文件的成本。
  • 我们可以合并与其他 JPA 提供程序一起使用的应用程序
  • 使用不同的实现可以向标准实现添加功能,这些功能以后可以成为 JPA 规范的一部分。

5) 什么是可嵌入类?

可嵌入类表示实体状态,但没有自己的持久标识。此类对象共享拥有它的实体类的标识。实体可以具有单值或多值可嵌入类属性。


6) 列出一些 ORM 框架。

以下是基于 ORM 机制运行的各种框架:-

  • Hibernate
  • TopLink
  • ORMLite
  • iBATIS
  • JPOX

7) 什么是 JPQL?

JPQL 是 JPA 规范中定义的 Java 持久化查询语言。它用于构造查询。

8) 持久化实体对象的步骤是什么?

执行以下步骤以持久化实体对象。

  • 创建一个实体管理器工厂对象。java.persistence 包中的 EntityManagerFactory 接口用于提供实体管理器。

  • 从工厂获取一个实体管理器。

  • 初始化一个实体管理器。

  • 将数据持久化到关系数据库中。

  • 关闭事务

  • 释放工厂资源。

9) 插入实体的步骤是什么?

我们可以通过实体轻松地将数据插入数据库。EntityManager 提供了 persist() 方法来添加记录。以下步骤用于将记录插入数据库。

  • 创建一个实体类,例如,带有 student_name 属性的 Student.java
  • 现在,在 Persistence.xml 文件中映射实体类和其他数据库配置。
  • 在 com.Tpointtech.jpa.persist 包下创建一个名为 PersistStudent.java 的持久化类,用于持久化带有数据的实体对象

10) 查找实体的步骤是什么?

为了查找实体,EntityManager 接口提供了 find() 方法,该方法通过主键搜索元素。以下步骤用于在记录中查找实体。

  • 在 com.Tpointtech.jpa.student 包下创建一个名为 StudentEntity.java 的实体类,其中包含属性 s_name。

  • 现在,在 Persistence.xml 文件_中映射实体类和其他数据库配置。

  • 在 com.Tpointtech.jpa.Find 包下创建一个名为 FindStudent.java 的持久化类,用于持久化带有数据的实体对象。



  •  
  •  

11) 更新实体的步骤是什么?

JPA 允许我们通过更新实体来更改数据库中的记录。要执行以下步骤来更新实体。

StudentEntity.java

Persistence.xml

UpdateStudent.java

  • 在 com.Tpointtech.jpa.student 包下创建一个名为 StudentEntity.java 的实体类,其中包含属性 s_id 和 s_name。

  • 现在,在 Persistence.xml 文件中映射实体类和其他数据库配置。
  • 在 com.Tpointtech.jpa.update 包下创建一个名为 UpdateStudent.java 的持久化类,用于持久化带有数据的实体对象。

12) 删除实体的步骤是什么?

要从数据库中删除记录,EntityManager 接口提供了 remove() 方法。remove() 方法使用主键删除特定记录。要执行以下示例以删除实体。

Persistence.xml

Deletion.java

  • 在 com.Tpointtech.jpa.student 包下创建一个名为 StudentEntity.java 的实体类,其中包含属性 s_id 和 s_name。

  • 现在,在 Persistence.xml 文件中映射实体类和其他数据库配置。

13) 使用 JPA 插入记录机制?


14) 实体映射的不同方向是什么?

映射的方向可以是单向的或双向的。在单向映射中,只有一个实体可以映射到另一个实体,而在双向映射中,每个实体都可以映射或引用另一个实体。


15) 实体映射的不同类型是什么?

以下是对象关系映射的类型:-

  • 一对一映射: 一对一映射表示单值关联,其中一个实体的一个实例与另一个实体的一个实例相关联。在这种类型的关联中,源实体的一个实例最多可以映射到目标实体的一个实例。
  • 一对多映射: 一对多映射属于集合值关联的范畴,其中一个实体与另一个实体的集合相关联。在这种类型的关联中,一个实体的一个实例可以映射到另一个实体的任意数量的实例。
  • 多对一映射 多对一映射表示单值关联,其中实体集合可以与相似实体相关联。在关系数据库中,一个实体的多行可以引用另一个实体的同一行。
  • 多对多映射 多对多映射表示集合值关联,其中任意数量的实体可以与另一个实体的集合相关联。在关系数据库中,一个实体的多行可以引用另一个实体的多行。

16) 映射中的孤儿删除是什么?

如果一对一或一对多映射中的目标实体从映射中删除,则删除操作可以级联到目标实体。此类目标实体被称为孤儿,并且可以使用 orphanRemoval 属性来指定应删除孤儿实体。


17) 解释对象的持久化生命周期?

在持久化生命周期中,对象处于以下状态:-

  • 瞬态 - 当对象刚刚通过使用 new 关键字声明时,它被称为处于瞬态。当对象保持在瞬态时,它在数据库中不包含任何标识符(主键)。
  • 持久化 - 在此状态下,对象与会话关联,并保存到数据库或从数据库检索。当对象保持在持久化状态时,它包含数据库的一行并包含一个标识符值。我们可以通过将对象与 Hibernate 会话关联来使其持久化。
  • 分离 - 当 Hibernate 会话关闭时,对象进入分离状态。对分离对象所做的更改不会保存到数据库。

18) 标识符生成的不同类型是什么?

以下是 @GeneratedValue 注解所需的 ID 生成策略类型:-

  • 自动 ID 生成 - 在这种情况下,应用程序不关心 ID 生成的类型,并将此任务交给提供程序。如果未明确指定任何值,则生成类型默认为自动。
  • 使用表生成 ID - 标识符也可以使用数据库表生成。
  • 使用数据库序列生成 ID - 数据库支持称为序列的内部 ID 生成机制。要自定义数据库序列名称,我们可以使用 JPA @SequenceGenerator 注解。
  • 使用数据库标识生成 ID - 在这种方法中,每当向表中插入一行时,都会为标识列分配一个唯一标识符,该标识符可用于为对象生成标识符。

19) 什么是实体?

实体是一组状态在单个单元中关联在一起。实体行为类似于对象,并成为面向对象范式的主要组成部分。换句话说,我们可以说实体是 Java Persistence Library 中应用程序定义的对象。每个实体都与元数据关联,元数据以 XML 或注解的形式表示其信息。


20) 实体的属性是什么?

实体必须具有以下属性:-

  • 持久性: 如果对象存储在数据库中并且可以随时访问,则称其为持久性。
  • 持久标识: 在 Java 中,每个实体都是唯一的,并表示对象标识。同样,当对象标识存储在数据库中时,它表示为持久标识。此对象标识等同于数据库中的主键。
  • 事务性: 在 Java 中,每个实体都是唯一的,并表示对象标识。同样,当对象标识存储在数据库中时,它表示为持久标识。此对象标识等同于数据库中的主键。
  • 粒度: 实体不应是基本类型、基本包装类或具有单维状态的内置对象。

21) Entity Manager 在 JPA 中的作用是什么?

实体管理器负责以下操作。

  • 实体管理器实现 API 并将所有 API 封装在一个接口中。
  • 实体管理器用于读取、删除和写入实体。
  • 由实体引用的对象由实体管理器管理。

22) 实体类有哪些约束?

实体类必须满足以下要求

  • 该类必须有一个无参数构造函数。
  • 该类不能是 final 的。
  • 该类必须使用 @Entity 注解进行注解。
  • 如果值将空实例作为分离对象传递,则该类必须实现 Serializable 接口。

23) Java 集合在 JPA 中的作用是什么?

在 JPA 中,Java 集合用于持久化包装类和 String 的对象。


24) 哪种类型的对象可以存储在 JPA 集合映射中?

以下是 JPA 允许存储的对象类型:-

  • 基本类型
  • Entities (实体)
  • 可嵌入类型

25) JPA 中可以使用哪种类型的集合?

为了存储多值实体关联和对象集合,使用以下类型的 Java 集合:-

  • 列表
  • Set
  • Map

26) JPA 中级联操作的目的是什么?

如果我们将任何任务应用于一个实体,那么使用级联操作,我们也可以将其应用于其相关实体。


27) JPA 支持哪些类型的级联?

以下是级联类型的列表:-

  • PERSIST: 在此级联操作中,如果父实体被持久化,则所有相关实体也将被持久化。
  • MERGE: 在此级联操作中,如果父实体被合并,则所有相关实体也将被合并。
  • DETACH: 在此级联操作中,如果父实体被分离,则所有相关实体也将被分离。
  • REFRESH: 在此级联操作中,如果父实体被刷新,则所有相关实体也将被刷新。
  • REMOVE: 在此级联操作中,如果父实体被移除,则所有相关实体也将被移除。
  • ALL 在这种情况下,所有上述级联操作都可以应用于与父实体相关的实体。

28) 什么是 JPQL?

Java 持久化查询语言 (JPQL) 是 JPA 规范的一部分,它定义了针对持久化实体的搜索。它是一种面向对象的查询语言,用于对持久化实体执行数据库操作。JPQL 不使用数据库表,而是使用实体对象模型来操作 SQL 查询。在这里,JPA 的作用是将 JPQL 转换为 SQL。因此,它为开发人员处理 SQL 任务提供了一个简单的平台。JPQL 是 Entity JavaBeans 查询语言 (EJBQL) 的扩展。

 


29) JPQL 有哪些功能?

JPQL 的一些基本功能是:-

  • 它简单而健壮。
  • 它是一种独立于平台的查询语言。
  • JPQL 查询可以静态声明到元数据中,也可以在代码中动态构建。
  • 它可以与任何数据库一起使用,例如 MySQL、Oracle。

30) 什么是 Criteria API?

Criteria API 是一个规范,它提供了使用 Java 编程语言 API 编写的类型安全且可移植的 Criteria 查询。它是构造实体及其持久化状态查询的最常用方法之一。它只是定义 JPA 查询的另一种方法。Criteria API 定义了一个独立于平台的 Criteria 查询,用 Java 编程语言编写。它是在 JPA 2.0 中引入的。其主要目的是提供一种类型安全的方式来表达查询。