Java 与JPA的多重连接

Java 与JPA的多重连接,java,mysql,hibernate,jpa,spring-data-jpa,Java,Mysql,Hibernate,Jpa,Spring Data Jpa,我与学生有3个实体组(1-∞) 以及学生的评级(1-∞) 组 我的目标是通过id选择所有grop,学生评分在两个日期之间。 我尝试过的解决方案 @Query(value = "select g from Group g INNER JOIN g.students s ON g.id = :id INNER JOIN s.ratings r ON r.student.id = s.id and r.date between :dateStart and :dateEnd GROUP BY g.

我与学生有3个实体组(1-∞) 以及学生的评级(1-∞)

我的目标是通过id选择所有grop,学生评分在两个日期之间。 我尝试过的解决方案

 @Query(value = "select g from Group g INNER JOIN g.students s ON g.id = :id INNER JOIN s.ratings r ON r.student.id = s.id and r.date between :dateStart and :dateEnd GROUP BY g.id")

 @Query(value = "SELECT * FROM Group g INNER JOIN student ON g.id_group = :id RIGHT JOIN rating on student.id_student = rating.id_student and rating.`date` between :dateStart and :dateEnd GROUP BY g.id_group",nativeQuery = true)

 @Query(value = "select g from Group g WHERE g.id = :id and g.students IN (select s from g.students s JOIN s.ratings r where r.date between :dateStart and :dateEnd) GROUP BY g.id")

您的@OneToMany映射错误。请使用
@OneToMany(mappedBy=“ratings”)
而不是@JoinColumn。请参阅

在JPQL中,无需加入ON条件。JPA将根据外键自动加入:

select g from Group g 
JOIN g.students s 
JOIN s.ratings r 
WHERE  g.id = :id 
AND r.date between :dateStart and :dateEnd

问题在哪里?将
评级也放在
类上。@MohsenR.Aqdamadded@AndrianekenaMoise问题来自我的目标和我尝试过的解决方案。如果你想让我复制它,我会做的。
@Entity
@Table(name = "rating")
public class Rating implements Serializable {
    @Temporal(TemporalType.DATE)
    @Column
    private Date date;

    @ManyToOne
    @JoinColumn(name = "id_student")
    public Student student;
}
 @Query(value = "select g from Group g INNER JOIN g.students s ON g.id = :id INNER JOIN s.ratings r ON r.student.id = s.id and r.date between :dateStart and :dateEnd GROUP BY g.id")

 @Query(value = "SELECT * FROM Group g INNER JOIN student ON g.id_group = :id RIGHT JOIN rating on student.id_student = rating.id_student and rating.`date` between :dateStart and :dateEnd GROUP BY g.id_group",nativeQuery = true)

 @Query(value = "select g from Group g WHERE g.id = :id and g.students IN (select s from g.students s JOIN s.ratings r where r.date between :dateStart and :dateEnd) GROUP BY g.id")
select g from Group g 
JOIN g.students s 
JOIN s.ratings r 
WHERE  g.id = :id 
AND r.date between :dateStart and :dateEnd