Hibernate双向一对多Cascade.All不工作

问题描述 投票:1回答:1

我有以下两个类AnswerSubAnswer

@Entity
public class Answer {
    @OneToMany(mappedBy = "answer", orphanRemoval = true, cascade = {CascadeType.ALL})
    List<SubAnswer> subAnswers;
}
public class SubAnswer {
    @ManyToOne(optional = false)
    Answer answer;
}

我就像这样拯救他们

{
   Answer ans = new Answer();
   List<SubAnswer> subAnswerList = new ArrayList<SubAnswer>();
   ans.setSubAnswers(subAnswerList);
   ans.add(new SubAnswer());
   ans.add(new SubAnswer());
   entityManager.save(ans);
}

当我保存Answer时,我认为它应该保存SubAnswers并保存它们但它没有设置SubAnswer.answer字段并且它保持为null

java hibernate one-to-many cascade
1个回答
0
投票

老实说,我不能说这是好/坏的做法,但我遇到了类似的问题,并通过使用以下方法修复它:

@Entity
public class Answer {
    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "answer_id")
    List<SubAnswer> subAnswers;
}

@Entity
public class SubAnswer {
    @ManyToOne
    @JoinColumn(name = "answer_id")
    Answer answer;
}

这会在SubAnswer表中为您提供“answer_id”列,并允许您执行以下操作:

{
   Answer ans = new Answer();
   List<SubAnswer> subAnswerList = new ArrayList<SubAnswer>();
   ans.setSubAnswers(subAnswerList);
   ans.add(new SubAnswer());
   ans.add(new SubAnswer());
   entityManager.save(ans);
}

仍然得到answer_id填充。

从旁注来看,我几乎没有开始进行休眠,所以如果有人对这个确定或者真正可怕的解决方案有任何意见,我会很感激听到这个!

© www.soinside.com 2019 - 2024. All rights reserved.