Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “我的实体”中未设置外键_Java_Jakarta Ee_Jpa - Fatal编程技术网

Java “我的实体”中未设置外键

Java “我的实体”中未设置外键,java,jakarta-ee,jpa,Java,Jakarta Ee,Jpa,当我持久化一个问题实例时,与该问题相关的答案对象不会将外键设置为该问题的主键。但是,问题实例和属于它的所有答案都成功地持久化到数据库中 如果你需要更多的代码,我会添加它 问题实体 @OneToMany(mappedBy = "question", fetch = FetchType.EAGER, cascade = { CascadeType.ALL }) @OrderBy("serialNumber ASC") private List<Answer> answers; @Man

当我持久化一个问题实例时,与该问题相关的答案对象不会将外键设置为该问题的主键。但是,问题实例和属于它的所有答案都成功地持久化到数据库中

如果你需要更多的代码,我会添加它

问题实体

@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设置问题实例,它是有效的。但是,当您使用上面的级联规则时,有人能说这是否正确吗。您仍然需要手动将它们连接在一起。

我认为您必须这样做。
cascadeType.ALL
只意味着如果你对你的
问题做任何事情,比如坚持它,你所有的
答案也会坚持下来。

我想你必须这样做。
cascadeType.ALL
只意味着如果你对你的
问题做任何事情,比如坚持它,你所有的
答案也会坚持下来。

是的,这是正确的。Hibernate使用关联的拥有方来持久化关联。拥有方是没有“mappedBy”属性的一方


当您持久化一个问题时,级联将使所有答案持久化,当您合并该问题时,级联将合并答案,对于所有其他操作也是如此。但是这种联系必须由你来处理。

是的,这是正确的。Hibernate使用关联的拥有方来持久化关联。拥有方是没有“mappedBy”属性的一方


当您持久化一个问题时,级联将使所有答案持久化,当您合并该问题时,级联将合并答案,对于所有其他操作也是如此。但是这种联系必须由你来处理。

嗯。。是的,我确实认为您必须手动设置双向关联对象的关联。也就是说,添加一个你应该做的答案

Answer a = new Answer();
question.addAnswer(a);
answer.setQuestion(question);

这至少是如果你希望这种关系是双向的,即能够从一个答案到另一个问题,反之亦然

嗯。。是的,我确实认为您必须手动设置双向关联对象的关联。也就是说,添加一个你应该做的答案

Answer a = new Answer();
question.addAnswer(a);
answer.setQuestion(question);
这至少是如果你希望这种关系是双向的,即能够从一个答案到另一个问题,反之亦然