我有一个跟踪员工项目的表单,字段为:员工名称(项目请求者(、分配给完成任务的员工、任务描述,以及一个可以选择将任务重新分配给其他人的字段。我有一个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文档中关于关联的章节。它包含了许多不同映射的示例。