我对 hibernate 中的 @JoinColumn
和 mappedBy
有疑问,在我阅读了 stackoverflow 和其他博客中的许多帖子后,我仍然感到困惑。
以此为例,每个员工有多个邮箱,一个员工可以拥有多个邮箱:
第一条声明: Email 是拥有方,因为它具有 Employee 表的外键,通常在关系中,“许多"的一面是拥有的一面。
在 hibernate 中,对于双向关系:
员工
@Entity
@Table(name = "employee")
public class Employee{
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "employee")
private List<Email> emails = new ArrayList<>();
//Constructors, getters and setters removed for brevity
}
电子邮件
@Entity
@Table(name = "email")
public class Email{
@Id
@GeneratedValue
private Long id;
private String email;
@ManyToOne
@JoinColumn(name = "employee_id")
private Employee employee;
//Constructors, getters and setters removed for brevity
}
所以根据我的阅读,通常 @JoinColumn
在拥有方,而 mappedBy
在反面。
但我也从某处读到,@JoinColumn
位于反面,而 mappedBy
位于拥有方。
我很困惑,哪个合适?
最佳答案
@JoinColumn 注解在拥有外键的类中维护。根据您的代码,电子邮件类将使用 @JoinColumn 注释指定外键引用。它实际上有助于两个表之间的映射,因为您通过此注释指定了桥接列名称“employee_id”。
另一方面,mappedBy只是用来启用实体之间的双向映射。所以,它应该在反向(非拥有类)上使用。
关于database - @JoinColumn 和 mappedBy 用于拥有方和反方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56880372/