JPA @Entity 注解的确切含义是啥?

Posted

技术标签:

【中文标题】JPA @Entity 注解的确切含义是啥?【英文标题】:What is the exact meaning of the JPA @Entity annotation?JPA @Entity 注解的确切含义是什么? 【发布时间】:2015-06-02 16:23:54 【问题描述】:

我正在学习Spring应用中的JPA,对@Entity注解有一些疑问。

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

@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 注释在类级别,这意味着作为此类实例的对象的字段将映射到 的字段>T_CUSTOMER 数据库表。

但是为什么在 JPA 中必须使用 @Entity 批注,而我不能只使用 @Table 批注将模型对象映射到特定的数据库表?它有一些其他的含义\行为,实际上我错过了?

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

【问题讨论】:

@Table 注释是可选的。那么,如果一个类不存在,JPA 将如何知道该类将被映射以在 ORM 过程中使用呢? @Entity 也是可选的,因为您可以在 orm.xml 中定义哪些类是实体 亲爱的尼尔。如果我们谈论的是类级别的注释怎么办,在这种情况下@Entity 是强制性的 【参考方案1】:

@Entity 注解定义了一个类可以映射到一个表。就是这样,它只是一个标记,例如Serializable interface。

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

    @Entity注释它

    创建一个 id 字段并用@Id注释它

任何其他都是可选的,例如表名是从实体类名派生的(因此@Table注释可以是可选的),表的列是从实体变量派生的(因此@Column注释可以是可选的),以及等等……

JPA 试图为想要学习/使用此 API 的开发人员提供一个快速且简单的入门,并让开发人员可以选择配置尽可能少的东西以使某些功能发挥作用是此 API 想要实现的方式之一这个“易于使用/学习”的目标。因此,@Entity 注释(连同@Id 注释)是创建实体所需的最少操作。

【讨论】:

如果“@Entity 注释定义了一个类可以映射到一个表”,他们为什么不直接使用 @Table !?会更清晰! @IanVaughan 可能是这也应该支持存储在不知道表的数据存储中的实体,例如一些nosql键值存储?【参考方案2】:

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

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

【讨论】:

来自网站链接的好报价。

以上是关于JPA @Entity 注解的确切含义是啥?的主要内容,如果未能解决你的问题,请参考以下文章

JPA-基本注解

JPA学习笔记——JPA注解

JPA:JPA基本注解

Java JPA 常用注解

Java JPA 常用注解

JPA 注解及主键生成策略使用指南