如何在存储库中使用 Spring Boot JPA / Hibernate 进行内连接?

Lor*_*der 3 spring hibernate jpa spring-data-jpa spring-boot

我目前正在学习 spring boot 、 hibernate 和 Spring Boot JPA

我为辅导中心和机构开发了一个课堂应用程序。

其中,学生在同一所学院注册了多个课程

学生实体类:

@Entity
@Table(name = "student")
public class Student  {

    private String name;

    private String dob;

    private String gender;

    private String address;

    private String email;

    private Integer mobile;

    private String joined;

    private Integer instID;

    @Id
    private String studentid;

    getters and setters()....
}
Run Code Online (Sandbox Code Playgroud)

课程表实体类

@Entity
@Table(name = "courses")
public class Course {

    private String name;

    private String description;

    private String logo;

    private String start;

    private String end;

    private Integer fee;
    @Id
    private String courseid;


    private Integer instID;

    getters and setters();
}
Run Code Online (Sandbox Code Playgroud)

注册类表的实体类

public class EnrolledCourses {

    @Id
    String enrollID;

    String courseid;
    String studentid;

    Date joined;

    getters  and setters()...

}
Run Code Online (Sandbox Code Playgroud)

JPA 存储库

 @Repository
    public interface StudentRepository extends CrudRepository<Student, String> {
        Student findTopByInstIDOrderByStudentidDesc(int instID);
    }

@Repository
public interface CourseRepository extends CrudRepository<Course,String> {
}

@Repository
public interface EnrolledRepository extends CrudRepository<Course,String> {
}
Run Code Online (Sandbox Code Playgroud)




我的需要

现在我正在检索给定机构中给定课程的注册学生...通过使用此 MySQL 查询

SELECT 
`enrolled_courses.enrollID`,
`student.name`, `student.studentid`
FROM `enrolled_courses`
INNER JOIN `student`
WHERE
`enrolled_courses.studentid` = `student.studentid`
AND
`student.instID` = 13
AND
`enrolled_courses.courseid` = '13I01C' ;
Run Code Online (Sandbox Code Playgroud)


现在我需要在 CourseRepository (或 enrolledstudent 存储库)中实现此内部联接查询



如何实现这一目标?

请指导我

Nay*_*yan 5

如果我们在 EnrolledCourses 实体中使用 hibernate 映射,例如

@Entity
public class EnrolledCourses {

    @Id
    String enrolledId;

    @ManyToOne
    Student student;

    @ManyToOne
    Course  course;

    Date joined;

    getters  and setters()...

}
Run Code Online (Sandbox Code Playgroud)

从上面的映射中,无需使用任何 SQL 查询,您就可以使用接口中的方法检索特定课程下的所有学生

@Repository
 public interface EnrolledRepository extends CrudRepository<EnrolledCourses,String> {
     List<EnrolledCourses> findByCourse_CourseId(String courseId);
 }
Run Code Online (Sandbox Code Playgroud)

如果我们在实体之间有一些关系,我们可以使用 Jpa 轻松检索所有字段。

  • @LordCommander您可以阅读[spring-data-jpa](https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#preface)的文档 (2认同)