Hibernate中的一对多、多对一、多对多(MySQL)

一对多 / 多对一:

Department.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.laisc.hibernatetest002.entity;

import jakarta.persistence.*;

import java.util.ArrayList;
import java.util.List;

@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;

// 一对多
@OneToMany(mappedBy = "department", cascade = CascadeType.ALL)
private List<Employee> employees = new ArrayList<>();
}

Employee.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.laisc.hibernatetest002.entity;

import jakarta.persistence.*;

@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;

// 多对一
@ManyToOne
@JoinColumn(name = "department_id", referencedColumnName = "id") //字段名为id
private Department department;
}

多对多

Student.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.laisc.hibernatetest002.entity.ManyToMany;

import jakarta.persistence.*;

import java.util.ArrayList;
import java.util.List;

@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;

@ManyToMany
@JoinTable(
name = "student_course",
joinColumns = @JoinColumn(name = "student_id", // 中间表字段名
referencedColumnName = "id" // 对应 Student 表的 id 列
),
inverseJoinColumns = @JoinColumn(name = "course_id", // 中间表字段名
referencedColumnName = "id" // 对应 Course 表的 id 列
)
)
private List<Course> courses = new ArrayList<>();
}

Course.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.laisc.hibernatetest002.entity.ManyToMany;

import jakarta.persistence.*;

import java.util.ArrayList;
import java.util.List;

@Entity
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String title;

@ManyToMany(mappedBy = "courses")
private List<Student> students = new ArrayList<>();
}