Я не был уверен в том, как искать это, поэтому был действительно неудачным Я просто начну с классов данных, которые у меня есть,
Вот учебный объект (пример)
@Data
@Entity
@Table(name = "TRAINING_PLAN")
@JsonIgnoreProperties({"trainings"})
public class TrainingPlan {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Column(name = "CURRENT_PHASE")
private int currentPhase;
@Column(name = "PREVIOUS_TRAINING_PLAN_ID")
private Long previousTrainingPlanId;
@OneToMany(mappedBy = "trainingPlan", fetch = FetchType.LAZY)
private List<Training> trainings = new ArrayList<Training>();
Вот учебный объект (пример)
@Data
@Entity
@Table(name = "TRAINING")
public class Training {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "TRAINING_PLAN_ID")
private TrainingPlan trainingPlan;
Я надеюсь, что смогу объяснить это четко, поэтому я пытаюсь добиться того, чтобы получить тренинги на всех предыдущих (TrainingPlan) фазах.
Как это работает - когда следующая (новая TrainingPlan) фаза плана Создается так, что он ссылается на старый План с помощью предыдущегоPlanId, поэтому он распознает своего родителя (его похожие слои).
Так, например, если у TrainingPlan есть фаза 2, я могу легко получить тренинги из фазы 1 аналогичным образом. на это:
public List<Training> trainingsFromPreviousPhase(TrainingPlan plan, List<TrainingPlan> planList) {
List<Training> previousPhaseTrainings = new ArrayList<Training>();
if (plan.getPreviousTrainingPlanId() != null) {
TrainingPlan previousPlanPhase = planList.parallelStream()
.filter(e -> e.getId() == plan.getPreviousTrainingPlanId()).findAny().get();
previousPhaseTrainings = previousPlanPhase.getTrainings();
}
return previousPhaseTrainings;
}
Теперь проблема в том, что если план находится на Фазе 5, мне нужно пройти тренинги на всех 4 предыдущих фазах, и вот где я застрял, не могу придумать метод автоматически l oop это. Надеюсь, я объяснил это не слишком сложно для понимания. Любые советы или вопросы приветствуются.
Здесь мне нужно что-то похожее на:
List<List<Training>> getTrainingsFromAllPreviousPhases()