2011-03-21 23 views
0

我有一個包含MedicalRecordsReceived實體的集合人口統計學實體:@OneToMany拉動所有相關領域,除了外鍵

//Demographics entity

@OneToMany(cascade = CascadeType.ALL, mappedBy = "demographics", fetch=FetchType.EAGER) private Collection medicalRecordsReceivedCollection;

//MedicalRecordsReceived entity

@JoinColumn(name = "demographics_id", referencedColumnName = "iddemographics") @ManyToOne(optional = false, fetch=FetchType.EAGER) private Demographics demographics;

當我拉了人口統計學實體(對於我的Struts應用程序),集合隨之而來,每個MedicalRecordsReceived實體中的所有字段都顯示正常,除了MedicalRecords中保存的Demographics實體的標識收到當然是外鍵的表。堅持時也會出現同樣的問題。不能找到外鍵,更新不會發生。

我知道當我拉人口統計實體時,我已經有了外鍵,但是想知道爲什麼我無法通過人口統計實體獲取。我想我不完全瞭解這裏的循環關係...

尼克

+0

哪位JPA供應商? – Premraj 2011-03-21 17:50:20

+0

EclipseLink(JPA 2.0) – Nick 2011-03-21 19:39:44

回答

0

不能映射同一個數據庫列到兩個不同的領域。 demographics_id連接列已用於映射ManyToOne關聯的人口統計信息。要獲得外鍵的值,只需使用medicalRecordsReceived.getDemographics().getId()即可。

要堅持新MedicalRecordsReceived實例指向人口統計學實例,你必須初始化協會(並保持反向關聯,有一個連貫的對象模型):

MedicalRecordsReceived m = new MedicalRecordsReceived(); 
m.setDemographics(demographics); 
demographics.getMedicalRecordsReceivedCollection().add(m); 
// the cascade will take care of the persistence of m 

想想就對象而言,不在專欄方面。

+0

只是好奇,demographics_id列如何映射到兩個字段?該字段存在於MedicalRecordsRecieved表中,並保存受衆特徵對象的主鍵。它僅在MedicalRecordsReceived的映射中直接引用。人口統計信息映射按照映射的MedicalRecordsReceived進行。謝謝。 – Nick 2011-03-21 20:35:10