Я пытаюсь оптимизировать свой код за счет сокращения запросов путем извлечения глубоких ассоциаций в одном запросе.
Я посмотрел везде и нашел это руководство https://vladmihalcea.com/hibernate-facts-multi-level-fetching/ проблема в том, что я не могу найти ничего о EntityGraphBuilder, на который ссылается писатель.
поле из User.java
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user", fetch = FetchType.LAZY)
private Set<Reply> replies = new HashSet<>();
поле из Rating.java
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "article")
private Article article;
UsersDao.java (код для оптимизации)
// Gets user result fully initialize from previous method
public void fetchComplete(User result) {
for (Rating r : ratings) {
if (r != null && r.getArticle().getWriter() != null) {
Hibernate.initialize(r.getArticle().getWriter());
Hibernate.initialize(r.getArticle().getKeywords());
Hibernate.initialize(r.getArticle().getRating());
writers.add(r.getArticle().getWriter());
}
}
}
Как видно из кода выше, этот метод будет выполнять огромное количество запросов, значительно снижая производительность, поэтому должен быть способ ленивой инициализации этих полей без такого большого количества запросов.
Ждем ваших ответов.