如何在 'One' 端使用 JPA 外键创建 table OneToMany

How to create with JPA foreignkey at 'One' side table OneToMany

我有两个 class 员工和电子邮件,具有关系 OneToMany 和 ManyToOne。

如何使用 JPA table 创建/生成外键列 ex:(email_id) at Employee table ?

this is image ERD Table Employee(OneToMany) & Email

@Entity
@Data
public class Employee {
@Id
private Long id;
private String name;
private String address;
@OneToMany
private List<Email> emailList;
}

@Entity
@Data
public class Email {
@Id
private Long id;
private String email;
@ManyToOne
private Employee employee;
}

设计不正确,外键应始终出现在 one to many 关系中的 many 端。一名员工可以拥有多封电子邮件。 Many 在电子邮件端。一封电子邮件仅与一名员工关联。

想一想,如果一个员工有很多邮件,在tableEmployee中如何呈现?在提供的设计中,只有 email_id 的员工会有重复的条目,这会有所不同。

但如果反过来,employee_id在tableEmail。电子邮件将有多个不同的条目,每个条目将与特定员工相关联。

因此 email_id 不应出现在 Employee 中,而 employee_id 应该出现在 table Email.

您在 Email class 中添加 @JoinColumn(name="employee _id", nullable=false) 作为:

@Entity
@Data
public class Employee {
...
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "employee")
private List<Email> emailList;
}

@Entity
@Data
public class Email {
...
@ManyToOne
@JoinColumn(name="employee_id", nullable=false)
private Employee employee;
}

Nb:根据设计,外键将只出现在电子邮件中 ​​table

如果您想这样做:

这是代码:

@Entity
@Data
public class Employee {
...
OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "email_id", referencedColumnName = "id")
private Email email;
}

@Entity
@Data
public class Email {
...
//remove this relationship
//@ManyToOne
//@JoinColumn(name="employee_id", nullable=false)
//private Employee employee;
}