当我持久化问题实例时,与该问题相关的答案对象不会将外键设置为问题的主键。但是,问题实例和属于它的所有答案都会成功保存到数据库中。
如果您需要更多代码,我会添加它。
提问实体
@OneToMany(mappedBy = "question", fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
@OrderBy("serialNumber ASC")
private List<Answer> answers;
回答实体
@ManyToOne(fetch = FetchType.LAZY)
private Question question;
或者我是否通过set
方法手动为每个答案分配问题实例?
更新 哦,我尝试在每个答案对象的setter上设置问题实例,并且它有效。但是,当你使用上面的级联规则时,有人会说这是否正确。您仍然需要手动将它们连接在一起。
答案 0 :(得分:2)
是的,这是对的。 Hibernate使用关联的拥有方来保持关联。拥有方是没有“mappedBy”属性的一方。
级联将在您保留问题时使所有答案持久,并在合并问题时合并答案,对所有其他操作也类似。但这种关联必须由你处理。
答案 1 :(得分:1)
我认为你必须这样做。 cascadeType.ALL
仅表示如果您对Question
执行任何操作(例如保留它),则所有Answer
也将保留。
答案 2 :(得分:1)
嗯..是的我确实认为你必须在双向关联中手动设置对象的assoiaction。我添加你应该做的答案
Answer a = new Answer();
question.addAnswer(a);
answer.setQuestion(question);
至少,如果你想让关系是双向的,即能够从回答到问题,反之亦然。