Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 JPA';不要在孩子身上工作';孤儿_Java_Jpa - Fatal编程技术网

Java JPA';不要在孩子身上工作';孤儿

Java JPA';不要在孩子身上工作';孤儿,java,jpa,Java,Jpa,我在使用JPA删除子元素的孤立项时遇到问题(如果不清楚,很抱歉,请参见下文) 我有一份问卷,其中包含一系列问题,其中包含一系列答案 班级问卷: public class Questionnaire { ... @OneToMany(mappedBy = "questionnaire", cascade = CascadeType.ALL, orphanRemoval = true) private Set<Question> questions = new Hash

我在使用JPA删除子元素的孤立项时遇到问题(如果不清楚,很抱歉,请参见下文)

我有一份问卷,其中包含一系列问题,其中包含一系列答案

班级问卷:

public class Questionnaire {
   ...
   @OneToMany(mappedBy = "questionnaire", cascade = CascadeType.ALL, orphanRemoval = true)
   private Set<Question> questions = new HashSet<>();
}
我正在使用一个带有REST服务的AngularJs前端

我只是对问卷进行JPA保存操作,如果需要,我希望插入、更新或删除问题和答案

多亏了CascadeType.ALL,当我保存问卷时,所有问题和答案都被正确插入和更新

由于孤儿删除=真,当我保存带有已删除问题的问卷时,这些已删除的问题将正确地从数据库中删除

但这不适用于删除的答案:当我保存包含删除答案的问题的问卷时,这些删除的答案不会从数据库中删除

有什么办法帮我吗?
谢谢:)

根据您的描述,它看起来像是您的提供程序中的一个bug,但您必须进行一些调试,以查看合并调用后对象中存在的内容。验证从“合并”返回的对象是否反映了您所期望的结果-期望的答案不再在图中。您还需要检查您的模型是否有其他内容未引用可能导致其重新出现的答案-仅当它们是私有对象时才应考虑删除孤立项,因为这些其他引用不会被清除。这可能也是
equals/hashCode
实现的问题,特别是如果问题碰巧被更新,然后从集合中删除。事实上,我的问题已经解决了。我真的不知道怎么做,但这不是Java部分的问题,因为我没有改变任何东西使其工作。我在前端(angularjs)上做了很多更改,所以我认为问题出在生成的JSON上。。。无论如何,谢谢你的帮助。
public class Question {
   ...
   @OneToMany(mappedBy = "question", cascade = CascadeType.ALL, orphanRemoval = true)
   private Set<Answer> answers = new HashSet<>();

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name="questionnaire_id")
   private Questionnaire questionnaire;
}
public class Answer {
   ...
   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name="question_id")
   private Question question;
}