在SpringJPA中,如何有效地从子表中检索特定的记录?

ajsxfq5m  于 2023-03-19  发布在  Spring
关注(0)|答案(1)|浏览(85)

假设我有以下表

One Teacher to Many Student

Teacher
id (pk)

Student
id (pk)
teacher_id (fk)
name (string)

对于Spring,我为Teacher和对应的TeacherRepository创建了一个实体,Student也是如此。
在JPA中,如何使用teacher.idstudent.name检索Student对象?
我可以使用带有原生查询的SQL语句来实现这一点,但我希望在维护对象关系的情况下实现这一点。
例如,使用idname作为输入,我可以这样实现:

Teacher teacher = teacherRepository.findBy(id);
Set<Student> students= teacher.getStudents();
for (Student s : students) {
  if (s.getName() == name)
    return s;
}

但这样做的问题是findBy不会对where Student.name=name执行select命令。JPA生成获取特定对象的SQL查询的方式是什么?

d8tt03nd

d8tt03nd1#

要按字段查找JPA实体,您可以向存储库的接口添加一个方法,JPA将根据方法名称生成SQL查询
例如,要按teacherId和姓名查找唯一的学生,您可以编写

public Strudent getByNameAndTeacherId(String name, Long teacherId)

如果该值可以为空,则使用find代替get

public Strudent? findByNameAndTeacherId(String name, Long teacherId)

https://www.baeldung.com/spring-data-derived-queries

相关问题