Fetch type дегеніміз не?
AI-дан жауап
sobes.tech AI
Fetch type в JPA байланысты объектілердің мәліметтер базасынан қалай жүктелетінін анықтайды. Екі негізгі түрі бар: EAGER және LAZY.
-
EAGER: Байланысқан объект негізгі объектімен бірге алғашқы сұрауда жүктеледі. Бұл байланысқан объект көбінесе қажет болғанда ыңғайлы, бірақ көп байланыс болғанда артық мәлімет жүктеуге және өнімділіктің төмендеуіне әкелуі мүмкін.
// EAGER жүктеудің мысалы @ManyToOne(fetch = FetchType.EAGER) private Address address; // Address User-пен бірге жүктеледі -
LAZY: Байланысқан объект тек оған бірінші рет жүгінгенде (мысалы, геттер шақырғанда) жүктеледі. Бұл қажет емес мәліметтерді жүктеуден сақтайды, бірақ әр байланысқан объектке жүгінгенде қосымша сұрау жасау керек болады, бұл "N+1 select" мәселесіне әкелуі мүмкін.
// LAZY жүктеудің мысалы @OneToMany(fetch = FetchType.LAZY, mappedBy = "user") private List<Order> orders; // Orders user.getOrders() шақырғанда ғана жүктеледі
Fetch type таңдау — өнімділік пен ыңғайлылық арасындағы компромисс. Көптеген коллекциялар үшін (@OneToMany, @ManyToMany) әдепкі бойынша LAZY пайдаланылады, ал бір байланыстар үшін (@ManyToOne, @OneToOne) — EAGER, егер @JoinColumn аннотациясы @OneToOne-дің иеленуші жағында болмаса, әдепкі бойынша да LAZY. Әдепкі бойынша LAZY пайдалану ұсынылады және оны тек талаптарға сай болғанда ғана EAGER-ге ауыстыру керек.
LAZY пайдалану кезінде жүктеуді оңтайландыру үшін JPQL/Criteria сұрауларында FETCH JOIN немесе @NamedEntityGraph қолдануға болады.