2011-03-21 21 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