在使用hibernate的spring mvc应用程序中,ManyToMany
实体与Patient
实体之间存在Organization
关系。此关系由名为organizationpatientjunction
的联结表管理,该联结表包含指向id
的整数Patient
和root
的字符串Organization
的链接。问题是每个organization
都有patient
的唯一ID,我希望能够保存,存储和检索patient
/ {{的每个唯一ID 1}}组合。如何在下面重新编写代码,以便为给定的organization
/ orgpatientid
组合检索organization
?
patient
答案 0 :(得分:1)
在对象模型中,您应该更改Set< Organization>映射<组织,...>。
现在您有两个选择:
使用值对象(可嵌入JPA中)作为地图的值类型-e.g.字符串。
使用实体作为值类型。
这个javadoc将两个选项描述为示例2和3:http://docs.oracle.com/javaee/6/api/javax/persistence/MapKeyJoinColumn.html
在您的代码中,您还具有从组织到人员的反向关联(逆映射)。需要这个吗?我建议删除它,尽管它可能。但是,您也应该将其更改为Map< ...,Person>并相应地绘制它。
@ElementCollection @CollectionTable(name="organizationpatientjunction", joinColumns={@JoinColumn(name="patient_id")})
@Column(name="patient_number")
@MapKeyJoinColumn(name="org_root")
private Map<Organization,String> providerorganizations = ...
public String getPatientNumberFor(Organization o) {
return providerorganizations.get(o);
}
您现在应该删除反向映射(删除Set&lt; Person&gt;),然后尝试正确映射它。