有人问我,实体是什么?
不幸的是,我不知道正确的定义。
首先我回答了
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问题创建的表的信息。
答案 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。
希望有帮助。