JPA @Entity 注释的确切含义是什么?

What is the exact meaning of the JPA @Entity annotation?

我正在研究 Spring 应用程序中的 JPA,我对 @Entity 注释有一些疑问。

所以我有一个像这样的模型 class:

@Entity
@Table(name= “T_CUSTOMER”)
public class Customer {

    @Id
    @Column(name=“cust_id”)
    private Long id;

    @Column(name=“first_name”)
    private String firstName;

    @Transient
    private User currentUser;

    ...........................
    ...........................
    ...........................
}

好的,我知道 @Entity 注释在 class 级别,这意味着对象的字段是此 class 将映射到 T_CUSTOMER 数据库 table.

的字段

但是为什么在JPA中必须使用@Entity注解而我不能只使用@Table注解将模型对象映射到特定数据库 table?它还有其他一些 meaning\behavior 实际上我想念的?

我错过了什么? @Entity 注释的确切含义是什么?

@Entity 注释定义 class 可以映射到 table。就是这样,它只是一个标记,例如 Serializable 接口。

为什么 @Entity 注释是强制性的? ...嗯,这就是 JPA 的设计方式。当您创建一个新实体时,您至少必须做两件事

  1. 注释为 @Entity

  2. 创建一个id字段并用@Id

  3. 注释

其他都是可选的,例如 table 名称派生自实体 class 名称(因此 @Table 注释可以是可选的),table 的列派生自实体变量(因此 @Column 注释可以是可选的),依此类推...

JPA 正试图为想要 learn/use 这个 API 的开发人员提供一个快速和简单的开始,并且让开发人员可以选择配置尽可能少的东西以使某些东西起作用是其中之一这个 API 想要实现这个 "easy to use/learn" 目标的方式。因此,@Entity 注释(连同 @Id 注释)是创建实体所需要做的最少操作。

JPA 中的实体只不过是表示可以持久保存到数据库的数据的 POJO。实体表示存储在数据库中的 table。实体的每个实例代表 table.

中的一行

关于实体的更多信息: https://www.baeldung.com/jpa-entities

实体表示使用容器管理自动存储在关系数据库中的持久数据 persistence.They 是持久的,因为它们的数据持久存储在某种形式的数据存储系统中,例如数据库:它们确实存在于服务器中故障、故障转移或网络故障。当一个实体被重新实例化时,前一个实例的状态会自动恢复。

实体为单个业务流程中的一个业务实体或多个操作建模。实体通常用于促进涉及数据和数据计算的业务服务。例如,您可以实现一个实体来检索和计算采购订单中的项目。您的实体可以在执行其任务时管理多个依赖的持久对象。

实体可以表示细粒度的持久对象,因为它们不是可远程访问的组件。

实体可以使用 JPA 持久性提供程序的事务、安全和并发服务将对象聚合在一起并有效地持久化数据和相关对象。