Сначала я начал решать проблему выбора N + 1 в моем сценарии отображения @OneToOne, и, наконец, мне удалось сократить количество запросов на выборку до одного.Я пытался использовать EntityGraphs для решения проблемы N + 1, но это не работает.Поэтому я изменил свое отображение @OneToOne на LAZY, установив тип выборки на Lazy и установив Optional = false.Я использую Hibernate JPA.
Я внес изменения, как показано ниже
Public Class Parent {
@OneToOne(
optional = false,
mappedBy = "parent",
fetch = FetchType.LAZY,
cascade = {CascadeType.ALL})
@NotFound
private Child child;
}
В классе «Мой ребенок»
Public Class Child {
@Id
private String Id;
@OneToOne
@PrimaryKeyJoinColumn
private Parent parent;
}
Класс репозитория такой, как показано ниже,
public interface ParentChildRepository extends PagingAndSortingRepository<Transaction, String> {
@EntityGraph(value = "Parent.EntityGraph", type = EntityGraphType.LOAD)
default List<Transaction> findall() {
return StreamSupport.stream(findAll().spliterator(), false).collect(Collectors.toList());
}
}
Без необязательного = false, LazyLoading не работает, и я получаю N + 1 операторов выбора запросов, но когда я устанавливаю необязательное = false, генерируется исключение EntityNotFoundException.EntityNotFoundException не генерируется, когда необязательный оператор = false удален / установлен в значение true, но он не устраняет мою проблему выбора N + 1.
Пожалуйста, предоставьте некоторые предложения.