Sobes.tech
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:

  1. Použitie JOIN FETCH v 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();
  1. Entity Graphs — deklaratívny spôsob, ako určiť, ktoré väzby majú byť načítané okamžite.

  2. FetchType.EAGER — eager načítanie, ale treba používať opatrne, aby sa nenahrávali zbytočné dáta vždy.

  3. Batch fetching — konfigurácia Hibernate na načítanie súvisiacich entít v dávkach, čím sa znižuje počet dotazov.

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