在JPA中,双向一对多
、一对一
和多对多
是常见的关联关系,用于描述实体之间的复杂关系。
1. 双向一对多关系
一个部门有多个员工,员工也属于一个部门。Department实体类中有一个List属性存储员工列表,Employee实体类中有一个Department属性表示所属部门。
Department实体类:
@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "department")
private List<Employee> employees;
}
Employee实体类:
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToOne
private Department department;
}
2. 一对一关系
一个人只有一个身份证,身份证也只属于一个人。Person实体类中有一个IDCard属性表示身份证,IDCard实体类中有一个Person属性表示持有者。
Person实体类:
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne
private IDCard idCard;
}
IDCard实体类:
@Entity
public class IDCard {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String cardNumber;
@OneToOne(mappedBy = "idCard")
private Person person;
}
3. 多对多关系
多个学生可以选择多门课程,课程也可以被多个学生选择。Student实体类和Course实体类之间建立多对多关系。
Student实体类:
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany
private List<Course> courses;
}
Course实体类:
@Entity
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(mappedBy = "courses")
private List<Student> students;
}