Имеют 3 объекта
Группа
@Entity
@Table(name = "`group`")
public class Group implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_group")
private Long id;
@OneToMany(mappedBy = "group",cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@OrderColumn(name = "id_student")
private List<Student> students = new ArrayList<>();
@ManyToOne
@JoinColumn(name = "id_faculty")
private Faculty faculty;
.....getters/setters
}
Студент
@Entity
@Table(name = "student")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope = Long.class)
public class Student implements Serializable {
@Id
@Column(name = "id_student")
private Long id;
......
@OneToMany(mappedBy = "student",cascade = CascadeType.ALL,fetch = FetchType.EAGER)
private List<Rating> ratings = new ArrayList<>();
@ManyToOne
@JoinColumn(name = "id_okr")
private OKR okr;
@ManyToOne
@JoinColumn(name = "id_group")
private Group group;
.....getters/setters
}
Рейтинг
@Entity
@Table(name = "rating")
public class Rating implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_rating")
private Long id;
@Temporal(TemporalType.DATE)
@Column
private Date date;
@ManyToOne
@JoinColumn(name = "id_student")
private Student student;
@ManyToOne
@JoinColumn(name = "id_paragraph")
private Paragraph paragraph;
.....getters/setters
}
JPA-запрос
@Query(value = "SELECT g FROM Group g INNER JOIN FETCH g.students s LEFT JOIN FETCH s.ratings r WHERE g.id = :id AND s.group.id = g.id AND (r.student.id = s.id AND r.date BETWEEN :startMonth and :endMonth OR r IS NULL) GROUP BY s.id")
Group findGroupByStudentGroupId(@Param("id") Long id ,@Param("startMonth") Date startMonth, @Param("endMonth") Date endMonth );
У меня есть ученик с идентификатором 8000, и после извлечения запроса список результатов содержит 8001 элементов, которые содержат 8 моих учеников и 7993нулевые значения.Если я удаляю аннотацию @OrderColumn, у меня есть MultiBagException (не может одновременно получать).Если добавить @OrderColumn в рейтинг ассоциации @OneToMany в сущности Student, у меня будут нулевые значения в коллекции Rating и в коллекции Student.Для меня логика @OrderColumn, которая возвращает нулевые значения как самый большой идентификатор в коллекции, кажется очень странной.Есть ли способ как это решить?
Hibernate версия 5.1.0 Final
Spring Data JPA 1.8.2