Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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_Spring_Hibernate_Spring Mvc - Fatal编程技术网

Java 集合未在多对多关系中填充

Java 集合未在多对多关系中填充,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,在spring mvc应用程序中,我在医务人员实体和患者实体之间存在多对多关系。创建新医务人员的jsp视图没有将指定的患者添加到与医务人员实例关联的患者集合中。您可以在控制器代码的以下打印屏幕中看到这一点,该代码正在调试模式下运行,并已在患者应添加到医务人员患者集合的点下方的行处停止: 类似地,下面的下一个打印屏幕显示调试器,该调试器指示给定医务人员的“患者”集合在控制器执行的上述点处为空,此时患者应已添加到医务人员: 底层mysql数据库中的查询显示医务人员已添加到医务人员表中,但联接

在spring mvc应用程序中,我在医务人员实体和患者实体之间存在多对多关系。创建新医务人员的jsp视图没有将指定的患者添加到与医务人员实例关联的患者集合中。您可以在控制器代码的以下打印屏幕中看到这一点,该代码正在调试模式下运行,并已在患者应添加到医务人员患者集合的点下方的行处停止:

类似地,下面的下一个打印屏幕显示调试器,该调试器指示给定医务人员的“患者”集合在控制器执行的上述点处为空,此时患者应已添加到医务人员:

底层mysql数据库中的查询显示医务人员已添加到医务人员表中,但联接表中没有任何记录应将医务人员与指定患者链接。为什么不将患者添加到医务人员中

如果我在代码的这一部分中写入patient.addCarrier或carrier.addPatientpatient,则结果是堆栈溢出错误,医务人员和患者之间无休止地重复添加,这表明显然不需要手动添加。那么,我如何确保患者得到补充

作为参考,我已将医务人员实体和患者实体的完整代码添加到文件共享站点,您可以通过单击以下链接访问该站点:

查看医务人员实体的代码。 您可以查看患者实体的代码

编辑:

按照Kresimir的建议,我改变了Patient.addCarparer方法,如下所示:

public void addCaregiver(Caregiver c) {getCaregiversInternal().add(c);}
我还将career.addPatient方法修改为:

public void addPatient(Patient p) {getPatientsInternal().add(p);}
请注意,GetCareerSinternal和getPatientsInternal分别返回医务人员和患者集合,如上面链接中文件共享站点的代码所示

新医务人员仍与相应患者的集合不关联。如何具体更改这些或其他方法以实现这一点

从映射判断,患者是拥有患者-护理者关系的实体。这可以从inverseJoinColumn指向医务人员id的事实推断出来

由于患者是拥有关系的实体,因此将医务人员添加到患者对象的医务人员集就足够了,hibernate应将关系存储在联接表中


此外,addPatient和AddCarrier方法也存在问题-它们相互调用,从而产生无休止的递归。修改patient.add医务人员以将医务人员添加到患者的医务人员集中,但不呼叫医务人员。addPatient也可避免在医务人员中重复出现。addPatient删除对患者的呼叫。add医务人员。

感谢您抽出时间写下答案。我现在正在测试这个。我将很快回复。我在上面的原始帖子上发布了一个编辑,显示了我对Patient.addcareer和career.addPatient所做的更改。尚未将新医务人员添加到选定患者的医务人员集合中。我能做些什么来解决这个问题?我发布了一个答案,但似乎我误解了你的问题。您的问题是控制器未正确填充“医务人员.患者”集合,还是hibernate未将集合正确存储到数据库中?我的回答与后者有关。如果是前者,您在哪里将医务人员添加到患者?@KresimirNesek问题是,当用户创建新医务人员记录时,医务人员没有添加到指定患者的医务人员集合中。我更关心患者护理者。患者的主jsp链接到此jsp,该jsp创建医务人员,然后返回到患者的主jsp。
@ManyToMany(cascade = {CascadeType.ALL}, fetch=FetchType.EAGER)
@JoinTable(name="careTeamJunction",
            joinColumns={@JoinColumn(name="patient_id")},
            inverseJoinColumns={@JoinColumn(name="caregiver_id")}) //patient owns relationship
private Set<Caregiver> caregivers = new HashSet<Caregiver>();