Встречается на собеседованиях • сегодня
Как решить LazyInitializationException
LazyInitializationException возникает при попытке доступа к лениво загруженной коллекции вне сессии Hibernate. Решения:
1. **Инициализация в транзакции**:
```java
// В сервисном слое
@Transactional
public Order getOrderWithItems(Long id) {
Order order = orderRepository.findById(id);
order.getItems().size(); // Инициализация коллекции
return order;
}
```
2. **Использование Hibernate.initialize()**:
```java
Hibernate.initialize(order.getItems());
```
3. **FetchType.EAGER** (не рекомендуется для всех случаев):
```java
@OneToMany(fetch = FetchType.EAGER)
private List- items;
```
4. **EntityGraph** (JPA 2.1+):
```java
@EntityGraph(attributePaths = {"items"})
Order findWithItemsById(Long id);
```
5. **JOIN FETCH в JPQL**:
```java
@Query("SELECT o FROM Order o JOIN FETCH o.items WHERE o.id = :id")
Order findByIdWithItems(@Param("id") Long id);
```
Лучшая практика - инициализировать коллекции в рамках транзакции, используя подходы 1, 4 или 5.

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