Встречается на 2% собеседований по Java
Как решал проблему N+1 в Hibernate
Проблема N+1 возникает, когда Hibernate делает один запрос для получения сущностей и N запросов для связанных коллекций. Решения:
- JOIN FETCH в JPQL/HQL:
java
List<Order> orders = em.createQuery(
"SELECT o FROM Order o JOIN FETCH o.items WHERE o.id = :id",
Order.class)
.setParameter("id", orderId)
.getResultList();- @BatchSize - загружает связанные сущности пачками:
java
@Entity
public class Order {
@BatchSize(size = 10)
@OneToMany(mappedBy = "order")
private List<Item> items;
}- @Fetch(FetchMode.SUBSELECT):
java
@OneToMany(mappedBy = "order")
@Fetch(FetchMode.SUBSELECT)
private List<Item> items;- EntityGraph (JPA 2.1+):
java
EntityGraph<Order> graph = em.createEntityGraph(Order.class);
graph.addAttributeNodes("items");
Map<String, Object> hints = new HashMap<>();
hints.put("javax.persistence.loadgraph", graph);
Order order = em.find(Order.class, orderId, hints);Выбор зависит от контекста: JOIN FETCH хорош для разовых запросов, BatchSize и Subselect - для частых обращений к коллекциям.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы