Ishga tayyor · JPA performance va N+1

Daraja: Ilg'or

Persistence context, fetch strategiya, projection, batch va paginationni boshqarish.

Tushuntirish

## Ishdagi vazifa Endpoint bitta ro‘yxat uchun yuzlab yashirin SQL yubormasligi kerak. N+1 parentlarni bitta queryda olib, har parent relationi uchun yana query ketganda paydo bo‘ladi. SQL log, query counter yoki profiler bilan isbotlanadi.

## Yechim tanlash Use-casega qarab fetch join, entity graph, DTO projection yoki batch fetching ishlatiladi. Hammasini EAGER qilish universal yechim emas. Collection fetch join bilan pagination noto‘g‘ri yoki juda qimmat bo‘lishi mumkin; avval ID page, keyin detail query usuli kerak bo‘lishi mumkin. `save()` chaqirish har doim darhol SQL degani emas — flush va transaction chegarasini biling.

## Ishga tayyor mezon Muhim endpoint uchun query soni va response vaqti test yoki metriqda cheklangan.

Kod misoli

@Query("select new app.OrderRow(o.id,u.name,o.total) " +
       "from Order o join o.user u where u.id=:userId")
Page<OrderRow> findRows(long userId, Pageable page);

Keng tarqalgan xatolar

Mashqlar

Teglar: career-03, jpa, performance, ishga-tayyor

Interaktiv ko'rinish (viktorina, izohlar, tarix)