单向一对多关联关系

以学生表和班级表为例

//班级实体类
@Data
@Entity
@Table(name = "class")
public class Clazz {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	private String cname;
//	一对多
//	存放所有学生
//	懒加载fetch  级联加载cascade
	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) // 什么时候用什么时候加载
//	关联列 name外键列 referencedColumnName主表里的id
	@JoinColumn(name = "cid", referencedColumnName = "id")
	private List<Student> stus;
}

//学生实体类
@Data
@Entity
@Table(name = "studentdb")
public class Student {
	@Id//实体类的主键
	@GeneratedValue(strategy = GenerationType.IDENTITY)//自动增长列
	private Integer id;//id
	private String name;//姓名
	private String age;//年龄
}

1. @OneToMany 表示该列为一对多关系列;
2.fetch 表示该实体的加载方式,有两种:LAZY 和 EAGER,懒加载和立即加载;其中,如果所需数据不是必须立即呈现的话,可以设置成懒加载的方式,什么时候需要,什么时候加载。立即加载的方式,会立马呈现出所需的数据。比如:查询班级信息的时候,如果立马需要学生信息的话,可以使用成立即加载;如果暂时不需要学生信息的话,可以使用懒加载。
3. cascade 表示与此实体一对一关联的实体的联级样式类型。联级样式上当对实体进行操作时的策略。
说明:在定义关系时经常会涉及是否定义 Cascade(级联处理)属性,担心造成负面影响。 不定义,则对关系表不会产生任何影响

  • CascadeType.PERSIST (级联新建)
  • CascadeType.REMOVE (级联删除)
  • CascadeType.REFRESH (级联刷新)
  • CascadeType.MERGE (级联更新)
  • CascadeType.ALL ,表示选择全部四项
  • targetEntity 表示默认关联的实体类型,默认为当前标注的实体类;
    4. mappedBy 属性用于双向关联实体时使用,在一的一方进行声明,表示自己不是一对多的关系维护端,
    由对方来维护。取值应该为多的一方的外键列对应的属性名。
    5. @JoinColumn(name=“cid”,referencedColumnName=“id”)说明:
    6. @JoinColumn:配置外键。name:设置外键的名字;referencedColumnName:参照主表的主键字段
    名称。

单向多对一关联关系

//学生实体类
@Data
@Entity
@Table(name = "studentdb")
public class Student {
	@Id//实体类的主键
	@GeneratedValue(strategy = GenerationType.IDENTITY)//自动增长列
	private Integer id;//id
	private String name;//姓名
	private String age;//年龄
//	多对一
	@ManyToOne(targetEntity = Clazz.class,cascade = CascadeType.ALL,fetch = FetchType.EAGER)
	//	关联列 name外键列 referencedColumnName主表里的id
	@JoinColumn(name = "cid",referencedColumnName = "id")
	private Clazz clazz;
}
//班级实体类
@Data
@Entity
@Table(name = "class")
public class Clazz {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	private String cname;
}

多对多关联

//班级实体类
@Data
@Entity
@Table(name = "class")
public class Clazz {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	private String cname;
//	多对多
	@JsonIgnore
	//	学生表中班级的字段clazz
	@OneToMany(mappedBy = "clazz",fetch = FetchType.EAGER,cascade = CascadeType.ALL)
	private List<Student> stu;
}
//学生实体类
@Data
@Entity
@Table(name = "studentdb")
public class Student {
	@Id//实体类的主键
	@GeneratedValue(strategy = GenerationType.IDENTITY)//自动增长列
	private Integer id;//id
	private String name;//姓名
	private String age;//年龄
//	多对多
//	@JsonIgnore 学生和班级只需要一个
	@ManyToOne(targetEntity = Clazz.class)
	@JoinColumn(name = "cid")//副表中的外键字段名称
	private Clazz clazz;