JPA中的实体是什么?

时间:2018-09-16 08:09:55

标签: jpa orm entity

有人问我,实体是什么?
不幸的是,我不知道正确的定义。

首先我回答了
Entity is just the class that related by Relational table.
但是我认为这不是全部意思。

然后我回答了
Entity is the one that is managed by persistence context.

然后他问我
So.. The table that created by @ManyToMany relation is entity?

然后我开始困惑。
实体的正确含义是什么?

然后请回答有关@ManyToMany问题创建的表的信息。

2 个答案:

答案 0 :(得分:1)

看看 Java EE教程

https://docs.oracle.com/javaee/7/tutorial/persistence-intro001.htm#BNBQA

您将在其中找到定义:

  

7.1个实体

     

实体是轻量级的持久性域对象。通常,   实体表示关系数据库中的表,每个实体   实例对应于该表中的一行。初级编程   实体的工件是实体类,尽管实体可以使用   助手类。

或者您也可以查看 JPA规范

http://download.oracle.com/otndocs/jcp/persistence-2_2-mrel-eval-spec/index.html

答案 1 :(得分:1)

JPA specification document(2.2版)在第23页上全部说明了:

  

实体是轻量级的永久域对象

就其本身而言,Entity只是可以将某种类型持久化到某个持久性存储(通常是(关系)数据库)的标记。但是,它没有定义在该域内如何映射/表达与其他 type 的关系。

在ORM上下文中,此类域对象(即域中特定类型的实例)被映射到数据库的模式,在关系数据库中,数据库的模式由集合表示的表格

要正确映射 n:m 关系(@ManyToMany),可能需要在持久性存储中使用其他结构,通常通过其他表来表示,例如TableA_TableB。因此,不能断言一个实体总是准确地对应 one 表,特别是在需要与其他类型的关系时。

从双向的角度来看,(关系)数据库中的表不一定要映射到域类型,因为它们将精确表示域的类型。换句话说:关系中的元组/行不一定与某个类型的实例(对象)相对应。有关背景和更多详细信息,请参见Mike Hillyer的Database Normalization Theory

希望有帮助。