我已经完成了一些hibernate关系映射教程。这有点令人困惑 - 休眠关系。
在第一个example中,student表和department表都有一个名为department_id的列。
在学生实体中,
@ManyToOne
@JoinColumn(name="department_id")
private Department department;
在部门实体中,
@OneToMany(mappedBy="department")
private Set<Employee> employees;
在第二个example中,我得到了(如果我错了,请纠正我)学生需要一对一的人通过Student_Phone拨打电话,同时使用student_id连接到student_phone。
在学生实体中,
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "STUDENT_PHONE", joinColumns = { @JoinColumn(name = "STUDENT_ID") }, inverseJoinColumns = { @JoinColumn(name = "PHONE_ID") })
public Set<Phone> getStudentPhoneNumbers() {
return this.studentPhoneNumbers;
}
我的问题是它使用inverseJoinColumn是什么。我知道inverseJoinColumnis以某种方式用于连接到Phone表。但我想
以上两个例子仅供参考。
与persistence api一样,它表示joincolumn根据映射类型引用目标或源表fk。
如果有人能够提供一种简单的方法来理解整个映射(例如),将会很有帮助。
答案 0 :(得分:1)
1) Which table's column does @JoinColumn refer to?
它指的是员工表中的外键列。
2) Suppose in department table/entity, department_id was named as id, then how will the referencing be done?
您总是使用外键列名称,将外键references
暂停到父表的方式无关紧要。
3) Also why is department_id column not specified as column in Employee entity class?
在某种程度上,您已经拥有了该映射,但是您有一个Object(Department
)映射。这是ORM
重要的地方。您指的是列的对象类型。
在第二个示例中,您正在使用连接表(可以在不加入表的情况下实现,就像您的第一个示例一样),您只是描述谁拥有关系(joinColumn
)和非拥有者side是inverseJoinColumn
,就像你的第一个例子中的mappedBy
一样。