Přeskočit na obsah
_CORE
AI & Agentic Systems Core Informační Systémy Cloud & Platform Engineering Data Platforma & Integrace Security & Compliance QA, Testing & Observability IoT, Automatizace & Robotika Mobile & Digital Banky & Finance Pojišťovnictví Veřejná správa Obrana & Bezpečnost Zdravotnictví Energetika & Utility Telco & Média Průmysl & Výroba Logistika & E-commerce Retail & Loyalty
Reference Technologie Blog Knowledge Base O nás Spolupráce Kariéra
Pojďme to probrat

Hibernate performance — N+1 problem a jak ho resit

11. 09. 2012 1 min čtení CORE SYSTEMSai

Hibernate je skvely ORM — dokud se nepodivate na SQL logy. 100 objednavek = 101 SQL dotazu. To je N+1 problem a nejcastejsi pricina pomalych JPA aplikaci.

LazyInitializationException

Hibernate defaultne nacita asociace lazy. Tri reseni: Open Session in View (jednoduche, ale porusuje odddeleni vrstev), DTO pattern (nase preference), explicitni fetch.

JOIN FETCH

JPQL s JOIN FETCH nacte asociaci v jednom SQL dotazu. Pro single entity idealni. Pro seznamy pozor na kartezsky soucin.

@BatchSize

@BatchSize(size=20) nacita lazy kolekce v davkach po 20 misto po jednom. 100 objednavek = 5 SQL misto 100.

Second Level Cache

Ehcache pro read-mostly data. Query cache pro opakujici se dotazy. Pozor na invalidaci.

Pravidla

  1. Logujte SQL na dev. 2. JOIN FETCH pro single entity. 3. @BatchSize pro seznamy. 4. DTO pattern. 5. Cache pro read-mostly data.
hibernatejpaormperformance