🪟 Windows TippsThe Gemini desktop app is now available for Windows(11.09.2026 um 17:06 Uhr)
⚠️ Malware / Trojaner / VirenWindows 11 just dropped the tool ransomware abused, Microsoft says don’t restore WMIC(10.09.2026 um 20:11 Uhr)
⚠️ Malware / Trojaner / VirenVorsicht: Android-Malware verschlüsselt Ihre Handys und nimmt heimlich Fotos auf(11.09.2026 um 09:35 Uhr)
🕵️ SicherheitslückenMicrosoft geht endlich eines der nervigsten Probleme von Windows 11 an(11.09.2026 um 11:58 Uhr)
💾 IT Security ToolsSysinternals Suite(11.09.2026 um 12:00 Uhr)
🕵️ SicherheitslückenDefender 0-Day ShieldBreak (CVE-2026-69414) nicht sauber gepatcht - BornCity(11.09.2026 um 12:52 Uhr)
🪟 Windows TippsThe Gemini desktop app is now available for Windows(11.09.2026 um 17:06 Uhr)
⚠️ Malware / Trojaner / VirenWindows 11 just dropped the tool ransomware abused, Microsoft says don’t restore WMIC(10.09.2026 um 20:11 Uhr)
⚠️ Malware / Trojaner / VirenVorsicht: Android-Malware verschlüsselt Ihre Handys und nimmt heimlich Fotos auf(11.09.2026 um 09:35 Uhr)
🕵️ SicherheitslückenMicrosoft geht endlich eines der nervigsten Probleme von Windows 11 an(11.09.2026 um 11:58 Uhr)
💾 IT Security ToolsSysinternals Suite(11.09.2026 um 12:00 Uhr)
🕵️ SicherheitslückenDefender 0-Day ShieldBreak (CVE-2026-69414) nicht sauber gepatcht - BornCity(11.09.2026 um 12:52 Uhr)

🔧 Programmierung 🕛 vor 1 Jahr 1 Min Lesezeit
0

Hibernate Zoo: Жадный Гиппопотам и Ленивый Лемур (Lazy vs Eager)

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

Сегодня мы познакомимся с двумя знаменитыми обитателями Hibernate Zoo: Жадным Гиппопотамом (EAGER fetching) и Ленивым Лемуром (LAZY fetching). Но перед тем как погрузиться в их особенности, давайте разберёмся, что означают аннотации @OneToMany, @OneToOne и другие. Эти аннотации — как указатели в зоопарке, определяющие связи между животными. В случае Hibernate они описывают отношения между сущностями в базе данных.






Понимание аннотаций в Hibernate



Hibernate использует аннотации для описания отношений между сущностями.



@OneToOne

Обозначает связь "один к одному", где одна сущность связана ровно с одной другой сущностью.

Пример: У пользователя (User) есть один профиль (Profile).



@OneToMany

Обозначает связь "один ко многим", где одна сущность связана с несколькими другими.

Пример: Один отдел (Department) может содержать нескольких сотрудников (Employees).



@ManyToOne

Обратное отношение к @OneToMany: несколько сущностей связаны с одной.

Пример: Многие заказы (Orders) принадлежат одному клиенту (Customer).



@ManyToMany

Обозначает связь "многие ко многим", где обе стороны могут быть связаны с несколькими сущностями.

Пример: Студенты (Students) могут посещать много курсов (Courses), а каждый курс может иметь много студентов.



Эти аннотации описывают, как сущности связаны, но не указывают, когда загружать данные. За это отвечают стратегии загрузки данных: EAGER (жадная) и LAZY (ленивая).





Жадный Гиппопотам (EAGER Fetching)



Жадный Гиппопотам — настоящий трудоголик. Увидев запрос к базе данных, он тут же спешит загрузить все связанные данные, даже если вы не планируете их использовать.





Особенности Ленивого Лемура:

Стратегия:




CODE
@OneToMany(fetch = FetchType.LAZY)
private List<Food> foodList;







При запросе объекта он подгрузит только его данные:




CODE
SELECT * FROM animal WHERE id = 1;







А связанные сущности загрузит позже, при первом обращении: animal.getFoodList();




CODE
SELECT * FROM food WHERE animal_id = 1;






Преимущества:

Ленивость экономит ресурсы. Вы запрашиваете ровно столько данных, сколько нужно, когда это нужно.



Недостатки:

Если забыть про ленивую стратегию и попытаться получить данные вне сессии, Hibernate выбросит исключение LazyInitializationException.





Секреты поведения по умолчанию



Если вы не указали стратегию загрузки, Hibernate сам решит, кто из животных возьмёт на себя работу. Но у него свои правила.



Жадный по умолчанию (EAGER)

Для связей @OneToOne и @ManyToOne Hibernate выбирает жадную загрузку. Это значит, что связанные сущности будут загружены сразу.




CODE
@Entity
class Animal {
@OneToOne
private Habitat habitat;
}










CODE
SELECT a.*, h.* 
FROM animal a
LEFT JOIN habitat h ON a.habitat_id = h.id
WHERE a.id = 1;







Почему?

Считается, что такие связи обычно важны для приложения, поэтому их загрузка заранее упрощает работу.



Ленивый по умолчанию (LAZY)

Для связей @OneToMany и @ManyToMany Hibernate выбирает ленивую загрузку.



Пример:




CODE
@Entity
class Animal {
@OneToMany
private List<Food> foodList;
}







При запросе Animal данные из Food не загружаются сразу:




CODE
SELECT * FROM animal WHERE id = 1;







Но как только вы обращаетесь к foodList, выполняется отдельный запрос:




CODE
SELECT * FROM food WHERE animal_id = 1;










Гиппопотам или Лемур: Кого выбрать?




























Характеристика Жадный Гиппопотам (EAGER) Ленивый Лемур (LAZY)
Когда использовать Когда данные всегда нужны Когда данные могут не понадобиться
Количество запросов Один, но большой Несколько, но маленьких
Проблемы Избыточная загрузка LazyInitializationException


Совет:

Лучше всегда явно указывать стратегию - это избавит вас от сюрпризов.






Заключение



Теперь вы знаете, как работают стратегии загрузки в Hibernate и какие из них используются по умолчанию:



EAGER для @OneToOne и @ManyToOne.

LAZY для @OneToMany и @ManyToMany.

Не забывайте приручать своих животных: выбирайте подходящую стратегию, чтобы ваш Hibernate Zoo работал эффективно. Удачного кодинга! 🐾

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
Windows 11 just dropped the tool ransomware abused, Microsoft says don’t restore WMIC
1 Quelle
Vorsicht: Android-Malware verschlüsselt Ihre Handys und nimmt heimlich Fotos auf
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Hibernate Zoo: Жадный Гиппопотам и Ленивый Лемур (Lazy vs Eager)

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 ...