Spring和Hibernate映射问题一对多



我有一个跟踪员工项目的表单,字段为:员工名称(项目请求者(、分配给完成任务的员工、任务描述,以及一个可以选择将任务重新分配给其他人的字段。我有一个SQL员工表,里面有所有员工的姓名和电子邮件。然后我有一张项目表。我已经设置好了,所以所有三列都通过外键引用employee表。

我遇到了Spring JPA的映射问题。一个项目可能有许多员工,因为有三个与员工相关的字段。这是对的吗?

或者应该是多对多,因为一个员工可以有很多项目,每个项目可以存储三个员工(相同或不同(,所以应该是多到多的关系。

对许多人来说,这似乎是正确的,但也令人困惑,因为只有一名员工列在员工姓名中,一名列在"分配给"字段中,一个列在"重新分配到"字段中。一对多对吗?

public class ProjectTracker {
@ManyToMany
@JoinColumn(name = "employeeName")
private Employee employeeName;
private String taskDetails;
@ManyToMany
@JoinColumn(name = "employeeName")
private Employee assignedTo;
@ManyToMany
@JoinColumn(name = "employeeName")
private Employee reassignedTo;
}
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "employeeId")
private Long employeeId;
private String employeeName;
private String emailAddress;
private Boolean isAssignee=false;
private Boolean isRequestor=true;
}

一个项目可以有很多员工,因为有三个员工相关字段。这是对的吗?

否。

字段数不相关。这里有三种不同的联想。给定一名员工,你需要一个他们请求的项目的关联,一个他们被分配到的项目的相关性,以及一个他们重新分配到的工程的相关性。所有这些关联都是一对多的,因为一名员工可以是许多不同项目的请求者,其他角色也是如此。

一个项目,数据库中的一行,只能有一个请求者、一个被分配给的员工和一个被重新分配给的人。每个人都是多对一。

ProjectTracker可能看起来像:

public class ProjectTracker {
@Id
private Long id; 
@ManyToOne
@JoinColumn(name = "requestedBy_id")
private Employee employeeName;
private String taskDetails;
@ManyToOne
@JoinColumn(name = "assignedTo_id")
private Employee assignedTo;
@ManyToOne
@JoinColumn(name = "reassignedTo_id")
private Employee reassignedTo;
}

给定一个项目跟踪器,您应该拥有所需的所有信息。我建议阅读Hibernate ORM文档中关于关联的章节。它包含了许多不同映射的示例。

最新更新