Как выполнить внутреннее присоединение с помощью Spring Boot JPA / Hibernate в репозитории? - PullRequest
0 голосов
/ 18 июня 2020

В настоящее время я изучаю Spring boot, hibernate и Spring Boot JPA

Я разрабатываю классное приложение для коучинговых центров и институтов.

В нем студенты записались на несколько курсов в одном институте

Класс Student Entity:

@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()....
}

Course Table Entity class

@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();
}

Таблица зарегистрированных классов Entity class

public class EnrolledCourses {

    @Id
    String enrollID;

    String courseid;
    String studentid;

    Date joined;

    getters  and setters()...

}

Репозиторий 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> {
}




Моя потребность

Теперь я получаю зачисленных студентов на заданный курс в данном институте ... с помощью этого 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' ;


Теперь мне нужно реализовать этот запрос внутреннего соединения в CourseRepository (или в репозитории enrolledstudent)



Как этого добиться?

Пожалуйста, наставьте меня

1 Ответ

3 голосов
/ 18 июня 2020

Если мы используем отображение гибернации в сущности EnrolledCourses, например

@Entity
public class EnrolledCourses {

    @Id
    String enrolledId;

    @ManyToOne
    Student student;

    @ManyToOne
    Course  course;

    Date joined;

    getters  and setters()...

}

из приведенных выше сопоставлений, без использования каких-либо запросов SQL, вы можете получить всех студентов, которые проходят конкретный курс. Используя метод в interface

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

если у нас есть отношения между сущностями, мы можем легко получить все поля с помощью Jpa.

...