2014-04-01 91 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