получить все данные о сотрудниках компании, используя JPA - PullRequest
0 голосов
/ 10 марта 2019

У меня есть следующие отношения.Я использую Spring JPA 2 и базу данных MySQL

enter image description here

Предприятие

@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<>();

Что я сделал для обходного пути

Я реализовал один-ко-один отношения между компанией и сотрудниками, так что я могу получить всех сотрудников из компании.Но я чувствую, что такой подход нарушает нормализацию СУРБД.В любом случае, я думаю, что сотрудники имеют отношения с Департаментом, а Департаменты имеют отношения с Компанией, поэтому мы можем получить весь список сведений о сотрудниках в компании, используя эти отношения.Поправьте меня, если я где-то ошибаюсь.

Также, как мы можем определить это в сущности Компании, не добавляя столбцы, связанные с компанией, в сущности Сотрудник

...