我有一个人口统计数据实体,其中包含一系列MedicalRecordsReceived实体:
//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实体中的所有字段都显示正常,但医疗记录接收表中保存的人口统计信息实体的ID当然是外键。持久存在同样的问题。无法找到外键并且不会发生更新。
我确实知道当我拉动人口统计数据实体时我已经拥有了外键但想知道为什么我无法通过人口统计实体获取。我想我不完全理解这里的循环关系...
尼克
答案 0 :(得分:0)
您无法将同一数据库列映射到两个不同的字段。 demographics_id
加入列已用于映射人口统计信息ManyToOne关联。要获取外键的值,只需使用medicalRecordsReceived.getDemographics().getId()
。
要保留指向Demographics实例的新MedicalRecordsReceived实例,您必须初始化关联(并保持反向关联以具有连贯的对象模型):
MedicalRecordsReceived m = new MedicalRecordsReceived();
m.setDemographics(demographics);
demographics.getMedicalRecordsReceivedCollection().add(m);
// the cascade will take care of the persistence of m
考虑对象,而不是列。