【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 线程:修炼生命周期的平衡之道,达到多线程编程的最高境界!
【6月更文挑战第19天】Java多线程编程犹如瑜伽修行,从创建线程开始,如`new Thread(Runnable)`,到启动线程的活跃,用`start()`赋予生命。面对竞争与冲突,借助同步机制保证资源访问的有序,如`synchronized`关键字。线程可能阻塞等待,如同瑜伽的静止与耐心。完成任务后线程终止,整个过程需密切关注状态变换,以求多线程间的和谐与平衡。持续修炼,如同瑜伽般持之以恒,实现高效稳定的多线程程序。
|
1天前
|
存储 安全 算法
Java并发编程中的线程安全性与性能优化
在Java编程中,特别是涉及并发操作时,线程安全性及其与性能优化是至关重要的问题。本文将深入探讨Java中线程安全的概念及其实现方式,以及如何通过性能优化策略提升程序的并发执行效率。
7 1
|
2天前
|
Java 开发者
【技术成长日记】Java 线程的自我修养:从新手到大师的生命周期修炼手册!
【6月更文挑战第19天】Java线程之旅,从新手到大师的进阶之路:始于创建线程的懵懂,理解就绪与运行状态的成长,克服同步难题的进阶,至洞悉生命周期的精通。通过实例,展示线程的创建、运行与同步,展现技能的不断提升与升华。
|
2天前
|
安全 Java 调度
Java并发编程:优化多线程应用的性能与安全性
在当今软件开发中,多线程编程已成为不可或缺的一部分,尤其在Java应用程序中更是如此。本文探讨了Java中多线程编程的关键挑战和解决方案,重点介绍了如何通过合理的并发控制和优化策略来提升应用程序的性能和安全性,以及避免常见的并发问题。
10 1
|
2天前
|
Java
【编程侦探社】追踪 Java 线程:一场关于生命周期的侦探故事!
【6月更文挑战第19天】在Java世界中,线程如同神秘角色,编程侦探揭示其生命周期:从新生(`new Thread()`)到就绪(`start()`),面临并发挑战如资源共享冲突。通过`synchronized`实现同步,处理阻塞状态(如等待锁`synchronized (lock) {...}`),最终至死亡,侦探深入理解并解决了多线程谜题,成为编程侦探社的传奇案例。
|
2天前
|
Java
【编程炼金术】Java 线程:从一粒沙到一个世界,生命周期的奇妙转化!
【6月更文挑战第19天】Java线程生命周期始于`Thread`类或`Runnable`接口,经历创建、新生、就绪、运行、阻塞到死亡五态。调用`start()`使线程进入就绪,随后可能获得CPU执行权变为运行态。当阻塞后,线程返回就绪,等待再次执行。理解并管理线程生命周期是优化多线程程序的关键。
|
2天前
|
Java
【技术解码】Java线程的五味人生:新建、就绪、运行、阻塞与死亡的哲学解读!
【6月更文挑战第19天】Java线程生命周期如同人生旅程,经历新建、就绪、运行、阻塞至死亡五阶段。从`new Thread()`的诞生到`start()`的蓄势待发,再到`run()`的全力以赴,线程在代码中奔跑。阻塞时面临挑战,等待资源释放,最终通过`join()`或中断结束生命。线程的每个状态转变,都是编程世界与哲思的交汇点。
|
2天前
|
SQL Java 关系型数据库
Java数据库编程的详细介绍
Java数据库编程的详细介绍
7 1
|
1天前
|
Java 机器人 程序员
Java中for循环大揭秘!掌握几种方式助你编程如风
Java中for循环大揭秘!掌握几种方式助你编程如风
|
1天前
|
JavaScript 前端开发 Java
Java编程StringTokenizer属性详解
Java编程StringTokenizer属性详解