Java Persistence API (JPA)
应用程序可通过数据持久性在非易失性存储系统中保存和检索信息。对于企业应用程序而言,由于需要访问关系数据库,因此持久性至关重要。为此环境开发的应用程序必须自行管理持久性或使用第三方解决方案,以使用持久性来处理数据库更新和检索。自 EJB 3.0 规范开始,Java™ Persistence API (JPA) 提供了一种机制来管理持久性及对象关系映射和功能。
JPA 规范在内部定义了对象关系映射,而不依赖于特定于供应商的映射实现。JPA 基于适用于 Java 企业修订版 (Java EE) 环境的 Java 编程模型,但 JPA 可以在 Java SE 环境中工作以测试应用程序功能。
JPA 表示持久性编程模型的简化。JPA 规范显式地定义了对象关系映射,而不依赖于特定于供应商的映射实现。JPA 通过使用注释或 XML 将对象映射至数据库的一个或多个表,对对象关系映射的重要任务进行了标准化。为了进一步简化持久性编程模型:
- EntityManager API 可以在数据库中保存、更新、检索或移除对象。
- EntityManager API 和对象关系映射元数据可处理大多数数据库操作,而不需要您编写 JDBC 或 SQL 代码来维护持久性。
- JPA 提供了查询语言,对独立 EJB 查询语言进行了扩展(扩展后的语言又称为 JPQL),您可以使用 JPQL 来检索对象,而不必针对您所使用的数据库编写 SQL 查询。
JPA 设计为可在 Java 企业修订版 (Java EE) 容器的内外进行操作。当您在容器中运行 JPA 时,应用程序可使用该容器来管理持久性上下文。 如果没有容器管理 JPA,那么应用程序必须自行管理持久性上下文。为容器管理的持久性设计的应用程序不需要这么多的代码实现即可处理持久性,但这些应用程序无法在容器外部使用。管理它们自己的持久性的应用程序可在容器环境或 Java SE 环境中工作。
支持 EJB 3.x 编程模型的 Java EE 容器必须支持 JPA 实现,后者也称为持久性提供程序。JPA 持久性提供者使用以下元素以便能够简化 EJB 3.x 环境中的持久性管理:
- 持久性单元
- 使用关系数据库定义完整的对象关系模型映射 Java 类(实体 + 支持结构)。EntityManagerFactory 使用此数据创建可通过 EntityManager 来访问的持久性上下文。
- EntityManagerFactory
- 用来为数据库交互创建 EntityManager。应用程序服务器容器通常提供此功能,但如果您使用的是 JPA 应用程序管理的持久性,那么 EntityManagerFactory 是必需的。EntityManagerFactory 的实例表示持久性上下文。
- 持久性上下文
- 定义应用程序当前正在操作的一组活动实例。可手动创建持久性上下文或通过注入创建。
- EntityManager
- 该资源管理器维护应用程序正在使用的活动实体对象集合。EntityManager 处理对象关系映射的数据库交互和元数据。EntityManager 的实例表示持久性上下文。容器中的应用程序可通过注入到应用程序或通过在 Java 组件名称空间中查询 EntityManager 来获取该 EntityManager。如果由该应用程序管理它自己的持久性,那么将从 EntityManagerFactory 获取 EntityManager。
- 实体对象
- 一个简单的 Java 类,以最简单的形式表示数据库表中的一行。实体对象可以是具体类,也可以是抽象类。它们通过使用属性或字段来维护状态。