什么是 JPA 实体类

JPA 实体类(JPA Entity)是 Java 程序中与数据库表一一映射的特殊类,用于将 Java 对象与数据库表记录进行关联,是 ORM(Object-Relational Mapping,对象关系映射)思想的核心载体。简单说,一个 JPA 实体类对应数据库中的一张表,类中的字段对应表中的列,类的实例对应表中的一行记录

JPA 实体类的核心特征

  1. 必须用 @Entity 注解标记
    这是识别实体类的 “身份证”,告诉 JPA:“这个类需要与数据库表建立映射”。

  2. 必须有主键(@Id 注解)
    对应数据库表的主键(PRIMARY KEY),用于唯一标识一条记录,没有主键会报错。

  3. 字段与数据库表列映射
    类中的成员变量默认对应表中的同名列(可通过 @Column 注解自定义列名、类型、约束等)。

  4. 被 JPA 容器管理
    实体类的创建、保存、更新、删除等操作由 JPA 框架(如 Hibernate)自动处理,无需手动写 SQL。

一个标准的 JPA 实体类示例

java

运行

import jakarta.persistence.*;
import java.time.LocalDateTime;

// 1. 标记为实体类(必加)
@Entity
// 2. 指定对应数据库表名(可选,默认用类名小写)
@Table(name = "t_user") 
public class User {

    // 3. 主键(必加 @Id)
    @Id
    // 4. 主键生成策略(自增 ID)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id; // 对应表中的 id 列(主键)

    // 5. 字段映射(name 指定列名,nullable 设为非空)
    @Column(name = "user_name", nullable = false, length = 50)
    private String name; // 对应表中的 user_name 列

    @Column(name = "user_age")
    private Integer age; // 对应表中的 user_age 列

    @Column(name = "create_time")
    private LocalDateTime createTime; // 对应表中的 create_time 列

    // 6. 必须有 getter/setter(JPA 需通过反射访问字段)
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    // ... 其他 getter/setter
}

对应的数据库表结构(自动生成)
当配置 spring.jpa.hibernate.ddl-auto=update 时,JPA 会根据实体类自动创建表 t_user,结构如下:

列名 类型 约束
id bigint 主键、自增
user_name varchar(50) 非空
user_age int 可空
create_time datetime 可空
为什么需要 JPA 实体类?
简化数据库操作:通过操作 Java 对象(如 user.setName(“张三”))替代写 SQL,降低开发难度。
屏蔽数据库差异:同一套实体类代码可适配 MySQL、Oracle 等不同数据库,无需修改逻辑。
自动维护映射关系:JPA 自动处理对象与表、字段与列的映射,开发者无需手动同步两者结构。

简单说,JPA 实体类让开发者可以用 “面向对象” 的思维操作数据库,而不用直接写 SQL 语句。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!