Junior — Middle
103
Jakými přístupy jste odstranili problém vícenásobných dotazů (N+1) v Hibernate a jak jste to realizovali?
Společnosti byly požádány
Stroki
Odpověď od AI
sobes.tech AI
Problém N+1 v Hibernate nastává, když při načítání kolekce entit pro každou z nich je provedena samostatná dotaz do databáze, což výrazně snižuje výkon.
Hlavní přístupy k řešení tohoto problému:
- Použití
JOIN FETCHv JPQL/HQL — umožňuje načíst související entity v jednom dotazu pomocí join.
String hql = "SELECT p FROM Parent p JOIN FETCH p.children";
List<Parent> parents = session.createQuery(hql, Parent.class).getResultList();
-
Entity Graphs — deklarativní způsob, jak určit, které vazby mají být načteny ihned.
-
FetchType.EAGER — eager načítání, ale je třeba používat opatrně, aby se nenahrávaly zbytečné data vždy.
-
Batch fetching — konfigurace Hibernate pro načítání souvisejících entit v dávkách, čímž se snižuje počet dotazů.
-
Použití
@Fetch(FetchMode.SUBSELECT)— Hibernate načítá kolekce jedním dodatečným dotazem s poddotazem.
Volba přístupu závisí na konkrétní situaci a požadavcích na výkon.