Java™ Persistence API 表示持久性编程模型的简化。
数据持久性,能够维持某种形式的非易失性存储器(如关系数据库)中的应用程序会话之间的数据,对企业应用程序至关重要。为此环境开发的应用程序必须自行管理数据持久性,或者利用第三方解决方案来处理数据库更新和检索。JPA 提供了一种机制,用于管理 EJB 3.0 规范的数据持久性、对象关系映射和功能。
JPA 基于适用于 Java EE 环境的 Java 编程模型,但 JPA 也可以在 Java SE 环境中工作。JPA 规范在内部定义了对象关系映射(而不依赖于特定于供应商的映射实现),并可以使用注释或 XML 将对象映射到数据库表中。
JPA 设计为可在 Java Enterprise
Edition (Java EE) 容器的内外进行操作。当您在容器中运行 JPA 时,应用程序可使用该容器来管理持久性。
如果不存在可用于管理 JPA 的容器,那么应用程序必须自行处理持久性管理。为容器管理的持久性设计的应用程序无法在容器外部使用,而管理它们自己的持久性的应用程序可以在容器环境或 Java SE 环境中工作。
JPA 还提供了查询语言 JPQL,您可以使用该语言检索对象,而不必针对您所使用的数据库编写 SQL 查询。
支持 JPA 的 Java EE 容器必须提供持久性提供程序。JPA 持久性提供程序使用以下元素来持久存储 EJB 3.0 环境中的数据:
- 实体对象:实体是一个简单的 Java 类,用于表示数据库表中的某一行。实体可以是具体类,也可以是抽象类。它们通过使用属性或字段来维护状态。
- EntityManager:EntityManager 对象维护应用程序正在使用的实体对象的活动集合。
EntityManager 对象处理数据库交互和对象关系映射的元数据。EntityManager 对象的一个实例表示持久性上下文。容器中的应用程序可通过注入到应用程序中或者通过在 Java 组件名称空间中查询 EntityManager 来获取该 EntityManager。如果由该应用程序管理它自己的持久性,那么将从 EntityManagerFactory 获取 EntityManager。应用程序服务器容器通常提供此功能,但如果您使用的是 JPA 应用程序管理的持久性,那么 EntityManagerFactory 是必需的。
注: 仅以下工件支持 EntityManager 的注入:
- EJB 3.0 会话 Bean。
- EJB 3.0 消息驱动的 Bean。
- Servlet,但注入在 JSP 中不受支持。
- 应用程序客户机的主类。
- EntityManagerFactory:工厂用于为数据库交互创建 EntityManager。
- 持久性单元:持久性单元由用于描述实体类对象与关系数据库之间的关系的声明式元数据组成。EntityManagerFactory 使用此数据创建可通过 EntityManager 来访问的持久性上下文。
- 持久性上下文:持久性上下文是应用程序正在处理的一组活动实例。可手动或通过注入来创建持久性上下文。