Hibernate Join列注释指的是哪个表coulmn

时间:2016-03-28 16:58:46

标签: hibernate jpa

我已经完成了一些hibernate关系映射教程。这有点令人困惑 - 休眠关系。

在第一个example中,student表和department表都有一个名为department_id的列。

enter image description here

在学生实体中,

@ManyToOne
@JoinColumn(name="department_id")
private Department department;

在部门实体中,

@OneToMany(mappedBy="department")
private Set<Employee> employees;
  1. @JoinColumn引用哪个表的列?
  2. 假设在deparment表/实体中,department_id被命名为id,那么引用将如何完成?
  3. 为什么在Student实体类中没有将department_id列指定为列?
  4. 在第二个example中,我得到了(如果我错了,请纠正我)学生需要一对一的人通过Student_Phone拨打电话,同时使用student_id连接到student_phone。

    enter image description here

    在学生实体中,

    @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表。但我想

    1. 如何进行反向连接?
    2. 是否要求电话通过phone_id连接到student_phone,反之亦然?
    3. 以上两个例子仅供参考。

      persistence api一样,它表示joincolumn根据映射类型引用目标或源表fk。

      如果有人能够提供一种简单的方法来理解整个映射(例如),将会很有帮助。

1 个答案:

答案 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一样。