java中的关系
泛型:继承关系
实现
组合
聚合
关联
依赖
jpa中的关系
组合,聚合,关联
单向一对多,单向多对一,
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "department_id")
双向一对多/多对一:两边都要配置,但是我们为了提高性能,我们会在一遍选择放弃维权
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "department_id")
单项多对多,
/**
* @ManyToMany 表示多对多,为了方便记忆,我们都统一写成懒加载
* JPA会自动创建一张中间表,名称为: 当前实体类对应表名称_对方实体类对应表名称
* 中间表内有两个外键
* 其中一个外键列名称为:当前实体类对应表名称_id
* 另一个外键列名称为:List集合类型的变量名称_id
* 我们可以通过@JoinTable注解来指定中间表的名称和两个外键列的名称
* @JoinTable 的name表示指定中间表的名称
* joinColumns 表示指定当前实体类对应表与中间表关联的外键列名称
* inverseJoinColumns 表示指定对方实体类对应表与中间表关联的外键列名称
*/
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_role",
joinColumns = {@JoinColumn(name = "user_id")},
inverseJoinColumns = {@JoinColumn(name = "role_id")})
双向多对多
两边实体类都需要配置,只需要交换位置就好了
单向一对一,双向一对一
@Entity
public class QQ {
@Id
@GeneratedValue
private Long id;
private String qqNum;
}
@Entity
public class QQZone {
@Id
@GeneratedValue
private Long id;
private String name;
/**
* optional 表示这个关联字段是否允许为null
* unique 表示在外键列上面添加唯一约束
*/
@OneToOne(fetch = FetchType.LAZY,optional = false)
@JoinColumn(name = "qq_id",unique = true)
private QQ qq;
}