gpt4 book ai didi

java - 多对多关系中的额外字段

转载 作者:行者123 更新时间:2023-12-01 12:40:21 25 4
gpt4 key购买 nike

在使用 hibernate 的 spring mvc 应用程序中,我在 Patient 实体和 Organization 实体之间有一个 ManyToMany 关系。这种关系由名为 organizationPatientjunction 的联结表管理,该联结表包含指向 Patient 的整数 id 和字符串 root 的链接组织的code>。问题是每个组织都有自己唯一的患者 ID,我希望能够保存、存储和检索患者的每个唯一ID >患者/组织组合。如何重写下面的代码,以便检索给定 organization/patent 组合的 orgPatentid

@Entity
@Table(name = "patient")
public class Patient {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public Integer id;

@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name="organizationpatientjunction",
joinColumns={@JoinColumn(name="patient_id")},
//do I add something here for the other organization's own patient id?
inverseJoinColumns={@JoinColumn(name="org_id")})
private Set<Organization> providerorganizations = new HashSet<Organization>();

//getters and setters
}

@Entity
@Table(name = "organization")
public class Organization {

@Id
@Column(name="root")
private String root;

@Column(name="name")
private String name;

@ManyToMany(mappedBy="providerorganizations")
private Set<Patient> patients = new HashSet<Patient>();

//getters and setters
}

CREATE TABLE IF NOT EXISTS patient(
id int(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
#other fields
)engine=InnoDB;SHOW WARNINGS;

CREATE TABLE IF NOT EXISTS organization(
root varchar(100) NOT NULL PRIMARY KEY,
name varchar(200)
)engine=InnoDB;SHOW WARNINGS;

CREATE TABLE IF NOT EXISTS organizationpatientjunction(
patient_id int(11) UNSIGNED NOT NULL,
org_root varchar(100) NOT NULL,
# Do I add orgpatientid varchar(100) here to store the other organization's patient id?
FOREIGN KEY (patient_id) REFERENCES patient(id),
FOREIGN KEY (org_root) REFERENCES organization(root)
)engine=InnoDB;SHOW WARNINGS;

最佳答案

在您的对象模型中,您应该将 Set 更改为 Map

现在您有两个选择:

  1. 使用值对象(可嵌入 JPA 中)作为 map 的值类型 - 例如字符串。

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

此 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 ),稍后尝试正确映射它。

关于java - 多对多关系中的额外字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25166212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com