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
- LazyInitializationExceptionni barcha relationni EAGER qilib yashirish.
Mashqlar
- N+1 chiqaradigan endpoint yozib, query sonini o‘lchang va projection bilan tuzating.
- Collection pagination uchun ikki bosqichli query test qiling.
Teglar: career-03, jpa, performance, ishga-tayyor