Когда мы используем отношения Один Два Многие два стороны и когда мы используем его одну сторону - PullRequest
0 голосов
/ 24 марта 2019

Я прочитал некоторый код, описывающий отношения двух сущностей с обеих сторон, которые выглядят следующим образом:

public class Department {
    @OneToMany(mappedBy = "department",fetch = FetchType.EAGER , cascade = CascadeType.ALL)
    private List<Course> courses = new ArrayList<>();
}

public class Course {
 @ManyToOne
    private Department department;
}

Существует два сценария: когда я использую аннотацию отношений с обеих сторон ("на обоих столах" Отдел и курс ") с отношением" один ко многим "и когда я использую только на одной стороне (" только стол с отделом "). Сценарий похоже на отношения «многие ко многим».

Мой вопрос: должен ли "fetch = FetchType.EAGER, cascade = CascadeType.ALL" быть определен только на одной стороне или обеих сторонах в вышеупомянутых сценариях?

1 Ответ

1 голос
/ 24 марта 2019

fetch and cascade опции могут быть определены с обеих сторон.Если он определен только с одной стороны, это не окажет никакого влияния при извлечении объекта с другой стороны.Например, если для курсов в классе «Отдел» задана функция «Стремительный выбор», а затем в классе «Курс», то если в отделе выполняется запрос на выборку, он будет извлекать вместе с ним все свои курсы.не извлекайте связанный с ним отдел, если он явно не вызван в запросе.

То же самое касается каскадного варианта.Таким образом, его определение с обеих сторон зависит от вида запросов, которые необходимо выполнить.Если в отделе будет много запросов, каждый раз для которых требуется вся информация о курсах, но это не то же самое для извлечения курса, тогда опция выборки должна быть определена только в классе Департамента для курсов.

Bi-направленная связь хороша, но с дополнительным обновлением в вашем коде для эффективных запросов, например use JoinColumn with @ManyToOne association, так что дополнительная информация о сопоставлении связей между двумя сущностями не должна поддерживаться на стороне кода.

...