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

Какие знаешь способы решения низкой производительности у Lazy загрузки JPA

  1. Batch Fetching – загрузка связанных сущностей пачками через @BatchSize. Уменьшает количество SQL-запросов.

    java
    @Entity
    @BatchSize(size = 20)
    public class Author { ... }
  2. Fetch Joins – использование JOIN FETCH в JPQL/HQL для загрузки связанных данных одним запросом.

    java
    @Query("SELECT a FROM Author a JOIN FETCH a.books WHERE a.id = :id")
    Author findByIdWithBooks(@Param("id") Long id);
  1. Entity Graphs – динамическое или статическое определение графа загрузки через @NamedEntityGraph.

    java
    @NamedEntityGraph(name = "Author.books", attributeNodes = @NamedAttributeNode("books"))
    @Entity
    public class Author { ... }
  2. DTO Projection – выборка только нужных полей через конструкторы DTO или интерфейсы Spring Data.

  3. Включение второго уровня кэша (Hibernate, EclipseLink) для часто читаемых данных.

  4. Оптимизация FetchType – замена LAZY на EAGER для критически важных связей (осторожно – может привести к N+1).

  5. Использование @Fetch(FetchMode.SUBSELECT) для загрузки коллекций одним подзапросом.

  6. Ручная инициализация через Hibernate.initialize() для контролируемой загрузки.

  7. Проверка N+1 проблем через логирование SQL и профилирование.

  8. Критичные участки – нативный SQL для сложных выборок.

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

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

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

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