Hibernate je skvělý ORM — dokud se nepodivate na SQL logy. 100 objednávek = 101 SQL dotazu. To je N+1 problem a nejčastější příčina pomalých JPA aplikaci.
LazyInitializationException¶
Hibernate defaultně načítá asociace lazy. Tri řešení: Open Session in View (jednoduché, ale porušuje odddeleni vrstev), DTO pattern (naše preference), explicitní fetch.
JOIN FETCH¶
JPQL s JOIN FETCH načte asociaci v jednom SQL dotazu. Pro single entity ideální. Pro seznamy pozor na kartezsky součin.
@BatchSize¶
@BatchSize(size=20) načítá lazy kolekce v dávkách po 20 misto po jednom. 100 objednávek = 5 SQL misto 100.
Second Level Cache¶
Ehcache pro read-mostly data. Query cache pro opakující se dotazy. Pozor na invalidaci.
Pravidla¶
- Logujte SQL na dev. 2. JOIN FETCH pro single entity. 3. @BatchSize pro seznamy. 4. DTO pattern. 5. Cache pro read-mostly data.
Potřebujete pomoc s implementací?
Naši experti vám pomohou s návrhem, implementací i provozem. Od architektury po produkci.
Kontaktujte nás