From a57f08c78c86edbe70540c40a83cd73fe6f22c4e Mon Sep 17 00:00:00 2001
From: Jan Tymel <410388@mail.muni.cz>
Date: Fri, 5 Feb 2021 08:33:51 +0100
Subject: [PATCH] Add OneToMany mapping of QuestionPhaseRelation to
 TrainingPhase

Resolves #7
---
 .../example/demo/domain/QuestionPhaseRelation.java   | 10 +++++-----
 .../java/com/example/demo/domain/TrainingPhase.java  | 12 ++++++++++++
 .../repository/QuestionPhaseRelationRepository.java  |  5 -----
 .../demo/service/QuestionnairePhaseService.java      |  2 +-
 4 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/src/main/java/com/example/demo/domain/QuestionPhaseRelation.java b/src/main/java/com/example/demo/domain/QuestionPhaseRelation.java
index e76be3f6..db6e6ae1 100644
--- a/src/main/java/com/example/demo/domain/QuestionPhaseRelation.java
+++ b/src/main/java/com/example/demo/domain/QuestionPhaseRelation.java
@@ -26,7 +26,7 @@ public class QuestionPhaseRelation {
     private QuestionnairePhase questionnairePhase;
 
     @ManyToOne(fetch = FetchType.LAZY)
-    private TrainingPhase relatedPhase;
+    private TrainingPhase relatedTrainingPhase;
 
     @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
     @JoinTable(name = "question_phase_relation_question",
@@ -61,12 +61,12 @@ public class QuestionPhaseRelation {
         this.questionnairePhase = questionnairePhase;
     }
 
-    public TrainingPhase getRelatedPhase() {
-        return relatedPhase;
+    public TrainingPhase getRelatedTrainingPhase() {
+        return relatedTrainingPhase;
     }
 
-    public void setRelatedPhase(TrainingPhase relatedPhase) {
-        this.relatedPhase = relatedPhase;
+    public void setRelatedTrainingPhase(TrainingPhase relatedPhase) {
+        this.relatedTrainingPhase = relatedPhase;
     }
 
     public Set<Question> getQuestions() {
diff --git a/src/main/java/com/example/demo/domain/TrainingPhase.java b/src/main/java/com/example/demo/domain/TrainingPhase.java
index 49f789df..fa488c0d 100644
--- a/src/main/java/com/example/demo/domain/TrainingPhase.java
+++ b/src/main/java/com/example/demo/domain/TrainingPhase.java
@@ -23,6 +23,10 @@ public class TrainingPhase extends AbstractPhase {
     @OneToMany(mappedBy = "trainingPhase", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
     private List<DecisionMatrixRow> decisionMatrix;
 
+    @OrderBy
+    @OneToMany(mappedBy = "relatedTrainingPhase", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
+    private List<QuestionPhaseRelation> questionPhaseRelations = new ArrayList<>();
+
     public String getEstimatedDuration() {
         return estimatedDuration;
     }
@@ -62,4 +66,12 @@ public class TrainingPhase extends AbstractPhase {
     public void setDecisionMatrix(List<DecisionMatrixRow> decisionMatrix) {
         this.decisionMatrix = decisionMatrix;
     }
+
+    public List<QuestionPhaseRelation> getQuestionPhaseRelations() {
+        return questionPhaseRelations;
+    }
+
+    public void setQuestionPhaseRelations(List<QuestionPhaseRelation> questionPhaseRelations) {
+        this.questionPhaseRelations = questionPhaseRelations;
+    }
 }
diff --git a/src/main/java/com/example/demo/repository/QuestionPhaseRelationRepository.java b/src/main/java/com/example/demo/repository/QuestionPhaseRelationRepository.java
index b4853fe2..49057b93 100644
--- a/src/main/java/com/example/demo/repository/QuestionPhaseRelationRepository.java
+++ b/src/main/java/com/example/demo/repository/QuestionPhaseRelationRepository.java
@@ -2,11 +2,6 @@ package com.example.demo.repository;
 
 import com.example.demo.domain.QuestionPhaseRelation;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
 
 public interface QuestionPhaseRelationRepository extends JpaRepository<QuestionPhaseRelation, Long> {
-
-    @Query("SELECT COALESCE(MAX(q.order), -1) FROM QuestionPhaseRelation q WHERE q.questionnairePhase.id = :phaseId")
-    Integer getCurrentMaxOrder(@Param("phaseId") Long phaseId);
 }
diff --git a/src/main/java/com/example/demo/service/QuestionnairePhaseService.java b/src/main/java/com/example/demo/service/QuestionnairePhaseService.java
index 20ba97f9..d2a095fb 100644
--- a/src/main/java/com/example/demo/service/QuestionnairePhaseService.java
+++ b/src/main/java/com/example/demo/service/QuestionnairePhaseService.java
@@ -127,7 +127,7 @@ public class QuestionnairePhaseService {
 
                 questionPhaseRelation.setOrder(order);
                 questionPhaseRelation.setSuccessRate(phaseRelation.getSuccessRate());
-                questionPhaseRelation.setRelatedPhase(trainingPhase);
+                questionPhaseRelation.setRelatedTrainingPhase(trainingPhase);
                 questionPhaseRelation.setQuestionnairePhase(questionnairePhase);
 
                 questionnairePhaseRelations.add(questionPhaseRelation);
-- 
GitLab