2014-04-01 51 views
0

在春天mvc应用程序中,我在Caregiver实体和Patient实体之间存在多对多的关系。创建新的caregiver的jsp视图不会将指定的patient添加到与caregiver实例关联的patients集合中。收集不填充多对多

:您可以在控制器代码的下面PRINTSCREEN,这是在调试模式下运行,并已停止在该点下方的线,其中patient应该已经添加到patientscaregiver的集合看到这

同样,下面的下一个PRINTSCREEN示出了调试程序指示patients集合为空对于给定caregiver,在上面所指出的在控制器的执行的点,其中所述patient应该被添加到caregiver

查询,该caregiver已被添加到caregiver表底层mysql数据库显示,但有在连接表中没有记录应当与指定patient链接caregiver。为什么patient没有添加到caregiver

如果我在代码的那部分写patient.addCaregiver(caregiver)caregiver.addPatient(patient),结果是无尽重复加入caregiverpatient彼此,表明手动添加显然是不必要的堆栈溢出错误。那么如何确保patient被添加?

仅供参考,我已经加入了Caregiver实体的全部代码和Patient实体到文件共享网站,您可以通过点击下面的链接访问:

Click here以查看该Caregiver实体代码。
您可以查看Patient实体by clicking on this link的代码。


编辑:


继克雷西米尔的建议,我改变了Patient.addCaregiver()方法如下:

public void addCaregiver(Caregiver c) {getCaregiversInternal().add(c);} 

我还修改了Caregiver.addPatient()方法成为:

public void addPatient(Patient p) {getPatientsInternal().add(p);} 

请注意,getCaregiversInternal()和getPatientsInternal()分别返回护理人员和患者集合,如上面链接中文件共享网站上的代码所示。

新护理人员仍然没有关联到相应患者的收集。我如何特别改变这些或其他方法来实现这一点?

+0

我发布了一个答案,但似乎我误解了你的问题。您的问题是caregiver.patients集合没有被控制器正确填充,或者是hibernate没有将集合正确存储到数据库的问题?我的答案与后者有关。如果是前者,你在哪里添加照顾者给病人? –

+0

@ KresimirNesek问题在于,当用户创建新的护理人员记录时,护理人员不会被添加到指定患者的护理人员集合中。我更关心patient.caregivers。病人的主要jsp连接到这个jsp,创建一个护理人员,然后返回到病人的主jsp。 – CodeMed

回答

0

从映射判断,Patient是拥有Patient - Caregiver关系的实体。这可以从事实inverseJoinColumn指向caregiver_id推导出。

@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>(); 

由于Patient是拥有关系的实体,它应该足以补充CaregiverPatient对象的caregivers组和休眠应存储在连接表的关系。

此外,addPatient和addCaregiver方法存在问题 - 它们互相调用创建无限递归。修改patient.addCaregiver以将护理人员添加到患者的护理人员设置中,但不要呼叫caregiver.addPatient以避免递归(或者在caregiver.addPatient中删除对patient.addCaregiver的呼叫)。

+0

感谢您花时间写出答案。我正在测试这个。我会很快回复。 – CodeMed

+0

我发布了一个编辑,上面显示了我对Patient.addCaregiver()和Caregiver.addPatient()所做的更改。新护理人员仍未被添加到选定患者的护理人员收藏中。我能做些什么来解决这个问题? – CodeMed