1.关系的分类
单向关系
- 1 →1
- 1→N
- N→1
- N→N
双向关系
- 1 - 1
- 1 - N
- N - N
2.无连接表的情况
2.1单向(只需在某一方书写@OneToOne、@OneToMany、@ManyToOne、@ManyToMany的注解,而另一方则为最普通的@Entity和@Table修饰的实体类即可)
2.1.1: 1→N(书写在1的一方的实体中的相应属性值上)
@OneToMany
@JoinColumn(该外键列并不在本类中,而是在关联的实体类所对应的表中)
2.1.2: N→1(书写在N的实体类中)
@ManyToOne
@JoinColumn
2.1.3: N→N(书写在某一个N的类中,该关系必须要有连接表(中间表))
@ManyToMany
@JoinTable
2.1.4: 1→1(书写在某一个类中)
@OneToOne
@JoinColumn
2.2双向的连接情况(每个类的注解如下,左右对应)
2.2.1: 1 --- 1
@OneToOne(mappedBy) @OneToOne
@JoinColumn
2.2.2 1 --- N
@OneToMany(mappedBy) @ManyToOne
@JoinColumn
2.2.3 N --- N
ManyToMany(mappedBy) @ManyToMany
@JoinTable
3.有连接表的情况下,不再基于外键(只书写了可能会使用到的,基本不可能使用到的则未书写)
3.1单向
3.1.1: 1→N
@OneToMany
@JoinTable
3.1.2: 1→1
@OneToOne
@JoinTable
3.1.3:N→1
@ManyToOne
@JoinTable
3.2双向
3.2.1: 1 -- N
@OneToMany(mappedBy) @ManyToOne
@JoinTable(只有在没有mappedBy的时候才书写,且与另一个类中的JoinTable对应属性相同) @JoinTable
注解属性书写说明:
1.@OneToMany,@OneToOne,@ManyToMany,@ManyToOne的注解的常用属性值:cascade、fetch、targetEntity(书写上之后会有效率的提升)
2.@JoinTable的属性值(主要包括三个):name、joinColumns(配置外键信息,参照当前类的主键列)、inverseJoinColumns(配置外键信息,参照关联实体类的主键列)
3.mappedBy:表示放弃管理关联的实体,交给另一方来维护,只在双向关联中使用。
4.@JoinColumn的主要属性值:name,referenceColumnName,unique