在 Spring DataJPA中,如何实现一对一、一对多、多对多关联查询?请举例说明
时间: 2024-12-12 12:22:51 浏览: 8
在Spring Data JPA中,可以使用以下方式来实现一对一(One-to-One)、一对多(One-to-Many)以及多对多(Many-to-Many)的关系查询:
1. **一对一关联**:
- 使用`@OneToOne`注解,并设置`mappedBy`属性指定哪个字段用于关联。例如:
```java
@Entity
class Parent {
@OneToOne(mappedBy = "parent")
private Child child;
}
@Entity
class Child {
@OneToOne
private Parent parent;
}
可以使用Repository的.findById(id).map(Parent::getChild)来查询Child。
```
2. **一对多关联**:
- 使用`@OneToMany`注解,指定`mappedBy`表示从哪个实体反向映射到当前实体。如:
```java
@Entity
class Teacher {
@OneToMany(mappedBy = "teacher")
private List<Student> students;
}
@Entity
class Student {
@ManyToOne
private Teacher teacher;
}
可以使用TeacherRepository.findStudentsByTeacher(id)获取学生列表。
```
3. **多对多关联**:
- 使用`@ManyToMany`和`@JoinTable`注解,如:
```java
@Entity
class Course {
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "course_students", joinColumns = @JoinColumn(name = "course_id"), inverseJoinColumns = @JoinColumn(name = "student_id"))
private Set<Student> students;
}
@Entity
class Student {
@ManyToMany(mappedBy = "courses")
private Set<Course> courses;
}
可以使用CourseRepository.findByStudents(studentId)获取该学生相关的课程集合。
阅读全文