🪟 Windows TippsThe Gemini desktop app is now available for Windows(11.09.2026 um 17:06 Uhr)
🪟 Windows TippsHeader and Footer not showing in Excel(14.09.2026 um 22:43 Uhr)
🕵️ SicherheitslückenBurn Out, Or Fade Away(14.09.2026 um 14:25 Uhr)
🪟 Windows TippsKB5129194 Windows 11 26H1 Out of Band Update - Deskmodder.de(14.09.2026 um 19:25 Uhr)
🪟 Windows TippsThe Gemini desktop app is now available for Windows(11.09.2026 um 17:06 Uhr)
🪟 Windows TippsHeader and Footer not showing in Excel(14.09.2026 um 22:43 Uhr)
🕵️ SicherheitslückenBurn Out, Or Fade Away(14.09.2026 um 14:25 Uhr)
🪟 Windows TippsKB5129194 Windows 11 26H1 Out of Band Update - Deskmodder.de(14.09.2026 um 19:25 Uhr)

🔧 Programmierung 🕛 vor 1 Jahr 2 Min Lesezeit
0

Зоопарк Hibernate: N+1 запросов или как накормить жадного бегемота

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht

Добро пожаловать в продолжение нашего приключения в зоопарке Hibernate! Сегодня мы сосредоточимся на одной из самых распространённых и коварных проблем — N+1 запросов. Если вы когда-либо замечали внезапные замедления в работе вашего приложения, скорее всего, это была проделка Жадного Бегемота. Но не волнуйтесь — мы расскажем, как приручить его и избежать неприятностей.






Что такое проблема N+1 запросов?



Представьте, что вы пришли в зоопарк посмотреть на группу бегемотов (сущностей). Вы хотите узнать, что каждый из них ел на обед (связанные сущности). Вместо того чтобы получить список всех бегемотов с их обедами за один раз, вы сначала спрашиваете список бегемотов (один запрос), а затем делаете отдельный запрос за обедом для каждого бегемота.





Если невозможно или неудобно использовать JOIN FETCH, аннотация @BatchSize может помочь. Она позволяет Hibernate загружать данные пакетами, а не по одному.



Пример:




CODE
@OneToMany(mappedBy = "hippo", fetch = FetchType.LAZY)
@BatchSize(size = 10)
private List<Meal> meals;






Теперь, если вы запросите 50 бегемотов, Hibernate выполнит не 50 отдельных запросов, а 5 запросов по 10 обедов каждый.






3. Используйте графы сущностей (Entity Graphs)



Графы сущностей позволяют гибко указывать, какие связи нужно загрузить, прямо на уровне запросов или аннотаций.



Пример




CODE
@Entity
@NamedEntityGraph(
name = "hippo-with-meals",
attributeNodes = @NamedAttributeNode("meals")
)
public class Hippo { /* ... */ }







Запрос с графом




CODE
@EntityGraph(value = "hippo-with-meals")
@Query("SELECT h FROM Hippo h")
List<Hippo> findAllHipposWithMeals();









4. Используйте проекции (Projections)



Проекции позволяют извлекать только нужные данные и избегать загрузки лишних сущностей.



Пример DTO




CODE
public class HippoMealDTO {
private final Long hippoId;
private final String hippoName;
private final String mealType;

public HippoMealDTO(Long hippoId, String hippoName, String mealType) {
this.hippoId = hippoId;
this.hippoName = hippoName;
this.mealType = mealType;
}
}










CODE
@Query("SELECT new com.example.dto.HippoMealDTO(h.id, h.name, m.type) " +
"FROM Hippo h JOIN h.meals m")
List<HippoMealDTO> findHipposWithMeals();







Результат:

Вы получаете только нужные данные, а Hibernate не загружает полностью сущности Hippoи Meal.






Заключение



Проблема N+1 запросов — это как попытка кормить Жадного Бегемота по одному кусочку вместо того, чтобы дать ему сразу целую корзину. Знание стратегий, таких как JOIN FETCH, @BatchSize, кеширование и использование DTO, позволяет избежать этой проблемы и сделать ваш код более эффективным.



Hibernate — мощный инструмент, но он требует умелого обращения. Следите за его поведением, и ваш зоопарк приложений будет работать как часы! 🦛✨

Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
1 Quelle
The Gemini desktop app is now available for Windows
1 Quelle
Header and Footer not showing in Excel
1 Quelle
Burn Out, Or Fade Away
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Зоопарк Hibernate: N+1 запросов или как накормить жадного бегемота

Thematisch verwandte Begriffe: Зоопарк, Hibernate, запросов, накормить · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...