hibernate - OneToMany 实体父字段在被父设置后给出 null
问题描述
我正在尝试提交一个表单,其中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
为什么会这样?
谢谢
解决方案
推荐阅读
- r - 在 R 中,这个括号 `[` 是什么?
- php - Laravel:使用外键从表中获取数据
- python - 在查询集中 Django DRF 中分别获取每个项目的计数
- flash-memory - Teraterm linux相当于将二进制文件推送到设备
- ubuntu - 如何防止ubuntu强制关机?
- java - 在简单的速度报告中实现递归
- gtk - 如何获取自定义 gtk 小部件的大小?
- ruby-on-rails - seed.rb 是名词还是动词?
- python - pyinstaller 无法使用某些未找到的库:这是因为 Outlook 原因吗?
- angular - 如何更改 FormBuilder 生成的数据的格式