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¶
- Logujte SQL na dev. 2. JOIN FETCH pro single entity. 3. @BatchSize pro seznamy. 4. DTO pattern. 5. Cache pro read-mostly data.