У меня есть следующие отношения.Я использую Spring JPA 2 и базу данных MySQL
Предприятие
@Entity
@Table(name = "company")
public class Company {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name="id", length = 45)
private String id;
@Column(name = "name")
private String name;
@Column(name = "address")
private String address;
@OneToMany(mappedBy = "company", cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JsonManagedReference
private List<Department> departments = new ArrayList<>();
// How to get bring all the employees over here
private List<Employee> employees = new ArrayList<>();
public Company() {
}
:
//getters and setters
}
Отделение
@Entity
@Table(name = "department")
public class Department {
@Id
@GeneratedValue(generator = "id")
@GenericGenerator(name = "id", strategy = "uuid")
@Column(length = 32)
private String id;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(referencedColumnName="id", name = "company")
@JsonBackReference
private Company company;
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "department", cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JsonManagedReference
private List<Employee> employees = new ArrayList<>();
public Department() {
}
:
//getters and setters
}
Подразделение сотрудника
@Entity
@Table(name = "employee")
public class Employee {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "id", length = 45)
private String id;
@Column(name = "name")
private String name;
@Column(name = "age")
private int age;
@Column(name = "position")
private String position;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(referencedColumnName = "id", name = "department")
@JsonBackReference
private Department department;
public Employee() {
}
:
//getters and setters
}
В Подразделение компании как получить список всех сотрудников, как показано ниже
private List<Employee> employees = new ArrayList<>();
Что я сделал для обходного пути
Я реализовал один-ко-один отношения между компанией и сотрудниками, так что я могу получить всех сотрудников из компании.Но я чувствую, что такой подход нарушает нормализацию СУРБД.В любом случае, я думаю, что сотрудники имеют отношения с Департаментом, а Департаменты имеют отношения с Компанией, поэтому мы можем получить весь список сведений о сотрудниках в компании, используя эти отношения.Поправьте меня, если я где-то ошибаюсь.
Также, как мы можем определить это в сущности Компании, не добавляя столбцы, связанные с компанией, в сущности Сотрудник