Ich habe einen Mitarbeiter, der in mehreren Abteilungen arbeitet. Ich habe eine OneToMany-Beziehung in der Mitarbeiterklasse und eine ManyToOne-Beziehung in der Abteilungsklasse.
@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; }
Die in MySQL erstellte Tabelle sieht folgendermaßen aus:
Das Problem ist, dass ich mehrere Mitarbeiter haben werde und diese mehrere Abteilungen haben können. Die Abteilungstabelle wird zu groß sein und die Abteilungsnamen werden für verschiedene Mitarbeiter wiederholt, wie im Bild oben gezeigt. Ich habe 2xManagement. Meine Frage ist, ob es möglich ist, eine Abteilungstabelle ohne Mitarbeiter-ID (nur mit Abteilungsnamen) zu erstellen und eine separate Tabelle mit nur zwei Attributen (Mitarbeiter-ID und Abteilungs-ID) zu verknüpfen. Muss ich dafür eine neue Klasse erstellen? Wie kann ich diese Beziehung optimieren? Gibt es eine Möglichkeit, dies zu tun?
您需要使用弱实体将解决方案更改为@ManyToMany, 参考文献: https://www.baeldung.com/hibernate-many-to-many