database - @JoinColumn 和 mappedBy 用于拥有方和反方
问题描述
@JoinColumn
我对hibernate的and有疑问mappedBy
,在我阅读了stackoverflow和其他博客中的这么多帖子之后,我仍然感到困惑。
以此为例,每个员工都有很多电子邮件,并且可以由一个员工拥有很多电子邮件:
第一个声明: 电子邮件是拥有方,因为它具有 Employee 表的外键,通常在关系中,“Many”方是拥有方。
在休眠中,对于双向关系:
员工
@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 仅用于启用实体之间的双向映射。因此,它应该用于反面(非拥有类)。
推荐阅读
- javascript - Puppeteer Promise Rejection (Query Selector If Class)
- ios - 在 swift 类中扩展通用目标 c 类
- r - 如何永久删除所有 NA?
- javascript - html 中粗体显示今天的营业时间
- ios - iOS 自定义键盘底座?
- python - 使固定时间步长 LSTM Keras 模型自由时间步长
- arrays - 如何使用包含数组名称的第二个变量引用现有的 bash 数组?
- c - 1 << 31不能用'int'类型表示?
- sql - 如何开始创建数据库?
- websocket - 我可以选择通过 Phoenix Presence 跟踪的特定进程/套接字吗?