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

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