我一直在学习JPA 2,并且已经了解了OneToMany和ManyToOne的关系。这是我的标准。
我按照以下方式构建了员工与反馈的关系。
在反馈课程中
@ManyToOne
@JoinColumn(name="idEmployee")
private Employee employee;
并在Employee类中,
@OneToMany(mappedBy = "employee", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Feedback> feedbacks = new ArrayList<Feedback>();
现在我可以检索为员工收到的所有反馈。但员工也可以向其他员工提供反馈。我怎样才能实现这种关系?
我需要使用地图关系吗?如果是,那为什么呢?
答案 0 :(得分:2)
正如我所理解的那样,两个表之间存在多对多的关系。
您应该使用@ManyToMany
进行批注或使用桥接表,以便桥接表与FeedBack具有多对一关系,并与Employee具有多对一关系。
我宁愿第二种方法,因为这尊重数据库设计的NF3。
答案 1 :(得分:2)
您需要另一个OneToMany关系:确保db表中的两列代表Feedback
:author
和receivee
:它们将指向employee表的主键,因此它们必须具有相同的类型。添加外键约束:它们都应指向employee
表的主键。然后,按照zbigniew的答案中的说明映射Java中的关系:
反馈类:
@ManyToOne
@JoinColumn(name="author")
private Employee author;
@ManyToOne
@JoinColumn(name="receivee")
private Employee receivee;
员工班级:
@OneToMany(mappedBy = "author", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Feedback> givenFeedbacks;
@OneToMany(mappedBy = "receivee", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Feedback> receivedFeedbacks;
答案 2 :(得分:1)
从反馈与两种类型的员工相关联的事实开始分析 - 一个是反馈的作者,另一个是收到反馈。之后,所有人都像这样建立起来。
@Entity
class Feedback {
// id etc ...
@ManyToOne
Employee author;
@ManyToOne
Employee receivee;
}
@Entity
class Employee {
// id etc ...
@OneToMany(mappedBy="author")
List<Feedback> feedbackGiven;
@OneToMany(mappedBy="receivee")
List<Feedback> feedbackReceived;
}