J'ai un employé qui travaille dans plusieurs départements. J'ai une relation OneToMany en classe Employee et ManyToOne en classe Department.
@Entity public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Size(min = 3, max = 10, message = "Invalid name") private String name; @Email private String email; @OneToMany(mappedBy = "employee") private List<Department> departments; } @Entity public class Department { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String department; @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "employee_id", referencedColumnName = "id") private Employee employee; }
La table créée dans MySQL ressemble à ceci :
Le problème est que j'aurai plusieurs employés et qu'ils pourront avoir plusieurs départements. La table des départements sera trop grande et les noms des départements seront répétés pour différents employés, comme le montre l'image ci-dessus. J'ai 2xManagement. Ma question est de savoir s'il est possible de créer une table de département sans Employee_id (uniquement avec le nom du département) et de créer un lien dans une table séparée avec seulement deux attributs (employee_id et Department_id). Dois-je créer une nouvelle classe pour cela ? Comment puis-je optimiser cette relation ? Y a-t-il un moyen de le faire ?
Vous devez changer la solution en @ManyToMany en utilisant des entités faibles, Références : https://www.baeldung.com/hibernate-many-to-many