Встречается на 9% собеседований по Java
Какие знаешь способы решения проблем N+1
-
JOIN FETCH в JPQL/HQL:
java@Query("SELECT e FROM Employee e JOIN FETCH e.department") List<Employee> findAllWithDepartment();Загружает связанные сущности одним запросом.
-
EntityGraph:
java@EntityGraph(attributePaths = "department") List<Employee> findAll();Указывает Hibernate загружать связи сразу.
-
Batch Fetching:
В аннотации@BatchSize:java@BatchSize(size = 10) class Department { ... }Загружает связанные сущности партиями.
-
DTO Projection:
java@Query("SELECT new com.example.EmployeeDto(e.id, e.name, d.name) FROM Employee e JOIN e.department d") List<EmployeeDto> findAllAsDto();Избегает N+1, выбирая только нужные поля.
-
Second Level Cache:
Кэширует часто запрашиваемые данные, уменьшая обращения к БД.
Выбор зависит от контекста: JOIN FETCH для простых связей, EntityGraph для динамического управления, Batch для коллекций, DTO для read-only сценариев.
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы