Fork me on GitHub
余鸢

JPA-实体之间的关系

@JoinTable注释示例

当在JPA中映射多对多关系时,可以使用@JoinTable注释来提供用于加入外键的表的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Entity
public class EntityA {
@Id
@Column(name="id")
private long id;
[...]
@ManyToMany
@JoinTable(name="table_join_A_B",
joinColumns=@JoinColumn(name="id_A"), referencedColumnName="id"
inverseJoinColumns=@JoinColumn(name="id_B", referencedColumnName="id"))
private List<EntityB> entitiesB;
[...]
}
@Entity
public class EntityB {
@Id
@Column(name="id")
private long id;
[...]
}

以上示例中,EntityA与EntityB具有多对多关系,由entitiesB字段实现,我们使用@JoinTable注释来指定连接表的表名是table_join_A_B,columns id_Aid_B,外键分别引用EntityA表和EntityB表中的列ID; (id_A,id_B)将是table_join_A_B表的复合主键。

实体关系中的多重性

多重性有以下类型:

  • One-to-one:每个实体实例与另一个实体的单个实例相关。
  • One-to-many:实体实例可以与其他实体的多个实例相关。
  • Many-to-one:实体的多个实例可以与另一个实体的单个实例相关。
  • Many-to-many:实体实例可以与彼此的多个实例相关。

One-to-One Mapping

One-to-one mapping定义了与具有一对一多重性的另一实体的单值关联。 此关系映射使用对应的持久性属性或字段上的@OneToOne注释。

示例:VehicleParkingPlace实体。

One-to-Many Mapping

实体实例可以与其他实体的多个实例相关。

一对多关系使用对应的持久性属性或字段上的@OneToMany注释。

需要mappedBy元素来引用在相应实体中由ManyToOne注释的属性:

1
@OneToMany(mappedBy="attribute")

一对多关联需要映射实体集合。

Many-to-One Mapping

通过使用@ManyToOne注释源实体(引用目标实体的属性)中的属性来定义多对一映射。

@JoinColumn(name="FK_name")注释表示关系的前缀键。

Many-to-Many Mapping

实体实例可以与彼此的多个实例相关。

多对多关系在对应的持久性属性或字段上使用@ManyToMany注释。

我们必须使用第三个表来关联两个实体类型(连接表)。

备注

实体之间的关系基础

外键可以是引用另一个表中唯一键(通常是主键)的一个或多个列。

外键和引用的主键必须具有相同的字段数和类型。

外键表示从一个表中的一列或多列到另一个表中的一列或多列的关系。