Родительское поле сущности OneToMany, дающее значение NULL после установки родительским полем - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь отправить форму с Quiz в качестве поддерживающей формы сущности и некоторыми Question внутри нее.

Эти две сущности связаны в двунаправленной ассоциации:

@Getter
@Setter
@ToString(exclude = { "questions" })
@Entity
@Table(name = "quiz")
public class Quiz {

    @Id
    @Column(name = "id_quiz")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int idQuiz;

    @OneToMany(mappedBy = "quiz", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<Question> questions = new LinkedList<>();

    public Quiz() {
                // Creating a Quiz with at least one question
        addQuestion(new Question());
    }

    public void addQuestion(Question question) {
        this.questions.add(question);
        // Setting Question parent for bidirectional association
        question.setQuiz(this);
    }
}
@Getter
@Setter
@ToString(exclude = { "quiz" })
@Entity
@Table(name = "question")
public class Question {

    @Id
    @Column(name = "id_question")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int idQuestion;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "quiz_id", referencedColumnName = "id_quiz")
    private Quiz quiz;
}

То, что я делаю в моем контроллере при загрузке формы, выглядит следующим образом:

@GetMapping("/quiz")
    public String quizPage(Model model) {
        Quiz quiz = new Quiz();
                // At this point quiz.questions contains one question object with its quiz field set.
        model.addAttribute("quiz", quiz);

        return "teacher/quiz";
    }

И затем я отправляю его в следующую конечную точку:

    @PostMapping("/process-quiz")
    public String processQuiz(@Valid @ModelAttribute Quiz quiz) {

        /*
// At this point, quiz.questions contains the question filled in the form but with its quiz field null
// I need to do this to set it again manually
                   for(Question question : quiz.getQuestions()) {
            question.setQuiz(quiz);
        }

*/
        quizService.save(quiz);

        return "redirect:/teacher";
    }

Проблема в том, что при загрузке формы в моем Quiz правильно добавляется Question с правильно установленной ассоциацией quiz.

Но когда я отправляю форму, эта самая Question имеет quiz поле null

Почему это происходит?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...