多对多关系中的额外字段

时间:2014-08-06 17:09:46

标签: java spring hibernate spring-mvc

在使用hibernate的spring mvc应用程序中,ManyToMany实体与Patient实体之间存在Organization关系。此关系由名为organizationpatientjunction的联结表管理,该联结表包含指向id的整数Patientroot的字符串Organization的链接。问题是每个organization都有patient的唯一ID,我希望能够保存,存储和检索patient / {{的每个唯一ID 1}}组合。如何在下面重新编写代码,以便为给定的organization / orgpatientid组合检索organization

patient

1 个答案:

答案 0 :(得分:1)

在对象模型中,您应该更改Set< Organization>映射<组织,...>。

现在您有两个选择:

  1. 使用值对象(可嵌入JPA中)作为地图的值类型-e.g.字符串。

  2. 使用实体作为值类型。

  3. 这个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;),然后尝试正确映射它。