Junior — Middle
107
Akými prístupmi ste odstránili problém viacerých dopytov (N+1) v Hibernate a ako ste to realizovali?
Spoločnosti boli požiadané
Stroki
Odpoveď od AI
sobes.tech AI
Problém N+1 v Hibernate nastáva, keď sa pri načítaní kolekcie entít pre každú z nich vykoná samostatný dotaz do databázy, čo výrazne znižuje výkon.
Hlavné prístupy na riešenie tohto problému:
- Použitie
JOIN FETCHv JPQL/HQL — umožňuje načítať súvisiace entity v jednom dotaze pomocou joinu.
String hql = "SELECT p FROM Parent p JOIN FETCH p.children";
List<Parent> parents = session.createQuery(hql, Parent.class).getResultList();
-
Entity Graphs — deklaratívny spôsob, ako určiť, ktoré väzby majú byť načítané okamžite.
-
FetchType.EAGER — eager načítanie, ale treba používať opatrne, aby sa nenahrávali zbytočné dáta vždy.
-
Batch fetching — konfigurácia Hibernate na načítanie súvisiacich entít v dávkach, čím sa znižuje počet dotazov.
-
Použitie
@Fetch(FetchMode.SUBSELECT)— Hibernate načíta kolekcie jedným dodatočným dotazom s poddotazom.
Výber prístupu závisí od konkrétnej situácie a požiadaviek na výkon.