有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate双向一对一级联。都不行

我有以下两个类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时,我认为它应该保存SubAnswer并保存它们,但它没有设置SubAnswer.answer字段,并且保持为空


共 (1) 个答案

  1. # 1 楼答案

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

    @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表中为您提供一个“答案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);
    }
    

    仍然能得到答案

    顺便说一句,我才刚刚开始使用hibernate,所以如果有人对这个解决方案是ok还是一个真正糟糕的解决方案有任何意见,我将非常感谢听到这些