我有一个 Many-To-Many relationship
介于 Quiz
表和a Question
table。我想问的是,我是如何得到逻辑下来,能够添加一个问题到一个测验的测验id,所以我可以链接到一个特定的测验多个问题。
测验实体侧
@ManyToMany(fetch = FetchType.EAGER, cascade = {
CascadeType.MERGE
})
@JoinTable(name = "quiz_content",
joinColumns = @JoinColumn(name = "quiz_id"),
inverseJoinColumns = @JoinColumn(name = "question_id")
)
private List<Question> questions = new ArrayList<>();
问题实体方
@ManyToMany(mappedBy = "questions")
private List<Quiz> quizList = new ArrayList<>();
这是我的控制器:
@PostMapping(value = "/add")
public String addQuestionToQuiz(Quiz quiz, BindingResult bindingResult, Model model) {
return "quiz/index";
}
我如何在注解中实现逻辑,因为当我实现时,它会抛出如下错误:
invalid property of bean class cannot get element with index 0 from set of size 0, accessed using property path.
2条答案
按热度按时间qhhrdooz1#
你应该使用
Set
而不是List
. 在这种情况下不应该使用级联。我在下面添加了一个带有测试类的实现,您可以在其中看到如何添加Question
示例到Quiz
示例。问题类
问题VM类
问题报告
测验课
快进班
奎兹雷波
奎兹雷波试验
quizservice类
控制器方法
umuewwlo2#
这是一种双向关系,因此需要使用自定义方法处理添加或删除操作,以避免任何不可预知的错误。您应该添加一个自定义
addQuestion()
方法,即Quiz
实体。然后你可以在测验中添加一个问题:
ps:我建议你使用
Set
而不是List
在@ManyToMany
为了更好的表现。