Встречается на собеседованиях • сегодня

Какие знаешь способы решения проблемы без использования @Transactional при выполнении UserRepository.findById() и User.getEmails().forEach(), если getUsers() является @Transactional, а поле email - @OneToMany

Используй JOIN FETCH в запросе, чтобы загрузить emails сразу:

java
@Query("SELECT u FROM User u JOIN FETCH u.emails WHERE u.id = :id")
User findByIdWithEmails(@Param("id") Long id);

Или инициализируй коллекцию вручную через Hibernate.initialize():

java
User user = userRepository.findById(id);
Hibernate.initialize(user.getEmails());
user.getEmails().forEach(...);

Также можно использовать EntityGraph:

java
@EntityGraph(attributePaths = "emails")
User findById(Long id);

Эти подходы избегают LazyInitializationException без @Transactional, загружая данные в одном запросе.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы