【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了(一)

简介: 【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了

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

相关文章
|
2天前
|
Java 编译器 程序员
java注解浅述
java注解浅述
12 1
|
1天前
|
存储 关系型数据库 MySQL
《MySQL 入门教程》第 05 篇 账户和权限,Java高并发编程详解深入理解pdf
《MySQL 入门教程》第 05 篇 账户和权限,Java高并发编程详解深入理解pdf
|
1天前
|
设计模式 算法 Java
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
|
1天前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
|
1天前
|
IDE Java 程序员
Java程序员必备的21个核心技术,你都掌握了哪些?,深入浅出Java开发
Java程序员必备的21个核心技术,你都掌握了哪些?,深入浅出Java开发
|
1天前
|
NoSQL Dubbo Java
StringBoot编程式事务与声明式事务java工程师面试突击第一季
StringBoot编程式事务与声明式事务java工程师面试突击第一季
|
2天前
|
ARouter Java
Java注解之编译时注解
Java注解之编译时注解
16 3
|
2天前
|
安全 Java 开发者
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第15天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将通过实例分析,理解线程安全的重要性,并学习如何通过各种技术和策略来实现它。同时,我们也将探讨如何在保证线程安全的同时,提高程序的性能。
|
2天前
|
Java 编译器 开发者
Java并发编程中的锁优化策略
【5月更文挑战第15天】 在Java的多线程编程中,锁机制是实现线程同步的关键。然而,不当的锁使用往往导致性能瓶颈甚至死锁。本文深入探讨了Java并发编程中针对锁的优化策略,包括锁粗化、锁消除、锁分离以及读写锁的应用。通过具体实例和性能分析,我们将展示如何有效避免竞争条件,减少锁开销,并提升应用程序的整体性能。
|
2天前
|
消息中间件 并行计算 Java
Java中的多线程编程:基础知识与实践
【5月更文挑战第15天】 在现代计算机编程中,多线程是一个复杂但必不可少的概念。特别是在Java这种广泛使用的编程语言中,理解并掌握多线程编程是每个开发者必备的技能。本文将深入探讨Java中的多线程编程,从基础概念到实际应用场景,为读者提供全面的理论支持和实践指导。