Встречается на собеседованиях • сегодня
Какие знаешь способы решения проблемы N+1 в Hibernate
Использование `JOIN FETCH` в JPQL/HQL:
```java
@EntityGraph(attributePaths = "orders")
@Query("SELECT c FROM Customer c JOIN FETCH c.orders WHERE c.id = :id")
Customer findByIdWithOrders(@Param("id") Long id);
```
Применение `@EntityGraph`:
```java
@Entity
@NamedEntityGraph(name = "Customer.orders",
attributeNodes = @NamedAttributeNode("orders"))
public class Customer { ... }
// Использование
@EntityGraph("Customer.orders")
Customer findById(Long id);
```
Настройка `FetchType.EAGER` (менее гибкий способ):
```java
@OneToMany(fetch = FetchType.EAGER)
private List orders;
```
Пакетная загрузка (Batch fetching) в `application.properties`:
```
spring.jpa.properties.hibernate.default_batch_fetch_size=20
```
Для всех способов важно учитывать:
- JOIN FETCH может привести к Cartesian Product
- EAGER загрузка может вызвать лишние запросы
- @EntityGraph более гибкий, чем EAGER
- Batch fetching оптимизирует множественные lazy-загрузки

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