我一直在学习JPA 2,并了解了OneToMany和ManyToOne的关系。这是我的标准。
我已经建立了员工反馈关系如下。
反馈类
@ManyToOne
@JoinColumn(name="idEmployee")
private Employee employee;在员工课上,
@OneToMany(mappedBy = "employee", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Feedback> feedbacks = new ArrayList<Feedback>();现在我可以检索员工收到的所有反馈信息。但是,员工也可以给其他员工反馈。我怎样才能实现这种关系?
我需要使用地图关系吗?如果是,那为什么?
发布于 2014-07-22 06:38:26
您需要另一个OneToMany关系:确保db表中的两个列表示Feedback:author和receivee:它们将指向employee表的主键,因此它们必须具有与此相同的类型。添加外键约束:这两个约束都应该指向employee表的主键。然后,映射Java中的关系,如zbigniew的答案所解释的:
反馈类:
@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;发布于 2014-07-21 18:52:37
正如我正确理解的那样,这两张表之间存在着多对多的关系。您应该使用@ManyToMany进行注释,或者有一个桥接表,以便桥表与FeedBack有多对一的关系,与员工有多对一的关系。我更倾向于第二种方法,因为这尊重数据库设计的NF3。
Persistence/ManyToMany
form
发布于 2014-07-21 14:32:05
从反馈是与两类员工相关的事实开始分析--一种是反馈的作者,另一种是收到反馈。在那之后,一切都是这样建立起来的。
@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;
}https://stackoverflow.com/questions/24866916
复制相似问题