JPA的介绍
Java持久化API(JPA)显著简化了EJB持续性并提供了一个对象关系映射方法,该方法使用可以采用声明方式定义如何通过一种标准的可移植方式,将Java对象映射到关系数据库表。
通过JPA可以使用注解配置实体的 JPA 行为。
注解:一种使用元数据修饰Java源代码的简单表达方法,它编译为相应的 Java 类文件,以便在运行时由 JPA 持续性提供程序解释以管理 JPA 行为。
JPA的介绍分析
- Java持久化API (JPA) 显著简化了Java Bean的持久性并提供了一个对象关系映射方法,该方法使您可以采用声明方式定义如何通过一种标准的可移植方式,将Java 对象映射到关系数据库表以及后续的一系列数据持久化行为。
- JPA可以将任何普通的Java 对象 (POJO) 类指定为 JPA 实体。
- JPA实体:一个应使用JPA实现程序的服务将其非临时字段持久保存到关系数据库(在 Java EE EJB 容器的内部或在简单 Java SE 应用程序中的 EJB 容器的外部)的 Java 对象。
- 可以使用注解配置实体的JPA行为,注解是一种使用元数据修饰 Java 源代码的简单表达方法,它编译为相应的 Java 类文件,以便在运行时由 JPA 持久化机制提供程序解释以管理 JPA 行为。
- 例如,要将Java类指定为JPA实体,请使用@Entity注解:
JPA注解总览
JPA实体型注解
@Entity
要将 Java 类指定为 JPA 实体,请使用 @Entity 批注,如下所示:
java
复制代码
@Entity public class Employee implements Serializable { ... }
默认情况下,JPA持久化提供程序假设Java类是非持续类,并且仅当使用此注解对其进行修饰的情况下才可用于JPA 服务,使用此注解将普通的旧式Java对象(POJO)类指定为实体,以便可以将它用于JPA服务,必须将该类指定为 JPA 实体。
使用 @Entity 批注将普通的旧式 Java 对象 (POJO) 类指定为实体,并使其可用于 JPA 服务。必须将 POJO 类指定为实体,然后才可以使用任何其他 JPA 批注。
@Table
默认情况下,JPA持续性提供程序假设实体的所有持久字段均存储到一个名称为实体名称的数据库表中。 在以下条件下,使用 @Table注解可以指定与实体关联的主表:
实体名称难于处理、是一个保留字、与预先存在的数据模型不兼容或作为数据库中的表名无效需要控制表所属的目录或模式。
如果希望 JPA 将某些字段持久保存到主表,而将其他字段持久保存到一个或多个辅助表,请参阅@SecondaryTable 。 下表列出了此批注的属性。有关更多详细信息,请参阅 API 。
java
复制代码
@Entity @Table(name="Model") public class JavaModel implements Serializable { ... }
@TableGenerator
- 如果使用 @GeneratedValue 批注指定一个 TABLE 类型的主键生成器,可以使用 @TableGenerator 批注微调该主键生成器以:
- 由于名称难于处理、是一个保留字、与预先存在的数据模型不兼容或作为数据库中的表名无效而更改主键生成器的表名称
- 更改分配大小以匹配应用程序要求或数据库性能参数
- 更改初始值以匹配现有的数据模型(例如,如果基于已经为其分配或保留了一组主键值的现有数据集构建)
- 使用特定目录或模式配置主键生成器的表
- 在主键生成器表的一列或多列商配置一个唯一的约束
@TableGenerator 属性
显示了如何使用此注解为名为 empGen 的 TABLE 主键生成器指定分配大小。
java
复制代码
@TableGenerator @Entity public class Employee implements Serializable { @Id @TableGenerator( name="empGen", allocationSize=1 ) @GeneratedValue(strategy=TABLE, generator="empGen") @Column(name="CUST_ID") public Long getId() { return id; } ...
@Temporal
使用 @Temporal 注解指定 JPA 的提供程序应只为 java.util.Date 和 java.util.Calendar 类型的字段或属性持久保存的数据库类型,可以与 @Basic 一起使用。
示例,显示了如何使用此批注指定 JPA 持续性提供程序应将 java.util.Date 字段 startDate 持久保存为 DATE ( java.sql.Date ) 数据库类型。
java
复制代码
@Entity public class Employee { @Temporal(DATE) protected java.util.Date startDate; ... }
@Transient
- 默认情况下,JPA 持久化提供程序假设实体的所有字段均为持久字段。
- 使用 @Transient 注解指定实体的非持久字段或属性,例如,一个在运行时使用但并非实体状态一部分的字段或属性。
- JPA 提供程序不会对批注为 @Transient 的属性或字段持久保存(或创建数据库模式)。
- 该注解可以与 @Entity 、@MappedSuperclass 和 @Embeddable 一起使用。
- 该注解没有属性。
java
复制代码
@Entity public class Employee { @Id int id; @Transient Session currentSession; ...}
【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了(二)https://developer.aliyun.com/article/1471008