【发布时间】:2019-07-17 08:41:51
【问题描述】:
我有 3 个实体组,学生 (1 - ∞) 和学生评分 (1 - ∞)
组
@Entity
@Table(name = "`group`")
public class Group implements Serializable {
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "id_group")
private List<Student> students;
}
学生
@Entity
@Table(name = "student")
public class Student implements Serializable {
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name = "id_student")
public List<Rating> ratings;
@ManyToOne
@JoinColumn(name = "id_group")
private Group group;
}
评分
@Entity
@Table(name = "rating")
public class Rating implements Serializable {
@Temporal(TemporalType.DATE)
@Column
private Date date;
@ManyToOne
@JoinColumn(name = "id_student")
public Student student;
}
我的目标是选择所有 grop by id 与学生评分在 2 个日期之间的学生。
我尝试过的解决方案
@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")
【问题讨论】:
-
问题在哪里?
-
也放置
Rating类。 -
@MohsenR.Aqdam 添加了
-
@AndrianekenaMoise 问题来自我尝试过的目标和解决方案。如果你想让我复制它,我会做的。
标签: java mysql hibernate jpa spring-data-jpa