Sobes.tech
Junior — Middle

Чӣ гуна бор кардани мавҷудоти вобаста ҳангоми истифодаи FetchType.EAGER дар JPA амалӣ мешавад?

sobes.tech AI

Ҷавоб аз AI

Ҳангоми истифодаи FetchType.EAGER дар JPA, мавҷудоти пайвастшуда ҳамзамон бо мавҷудоти асосӣ дар вақти иҷрои дархости ба базаи додаҳо бор карда мешаванд.

Ин маъно дорад, ки вақте ки объект аз база гирифта мешавад, JPA автоматӣ як дархости иловагӣ (ё дархости пайвастшуда бо JOIN) мебарад, то мавҷудоти пайвастшударо ба даст орад ва майдонҳои дахлдорро пур кунад.

Масалан, агар мавҷудоти Order дорои муносибат @OneToMany(fetch = FetchType.EAGER) бо OrderItem бошад, пас ҳангоми бор кардани фармоиш, ҳамаи мавҷудоти пайвастшудаи фармоиш фавран бор карда мешаванд.

Ин усул барои ҳолатҳое, ки маълумоти пайвастшуда ҳамеша зарур аст, қулай аст, аммо метавонад ба боркунии зиёдатӣ ва кам шудани самаранокӣ оварда расонад, агар маълумоти зиёде мавҷуд бошад ва онҳо ҳамеша истифода нашаванд.

Масалан:

@Entity
public class Order {
    @OneToMany(fetch = FetchType.EAGER)
    private Set<OrderItem> items;
    // ...
}

Ҳангоми бор кардани Order, Hibernate дархостҳоро иҷро мекунад, то ҳам OrderItem-ро фавран ба даст орад.

Баръакс аз FetchType.LAZY, ки дар он мавҷудоти пайвастшуда танҳо дар аввал дастрасӣ ба онҳо бор карда мешавад.