@Transactional annotation haqqinda. Cascade istifade olunmasi

Umumiyyetle bu annotation Service Layer de istifade etmek duzgundur. Repository de istifade etmek, Serivce layerden cagrilan her bir Repository method uchun tranzaksiyanin yaradilmasi demekdir. 

Meselen, UserRepository de save ve remove adli method var tutaq ki ve Transactional annotation u ile qeyd olunub. Service Layerde saveAndRemoveUnused adli method var. Bu method save edib, istifade olunmayanlari remove edecek. 
Eger Service Layerden bu iki methodu cagirsaq, bu zaman her bir emeliyyat uchun Tranzaksiya achilacaq ki, bu da db ni yora biler. Hell yolu olaraq, Service Layerde bu methodlarin istifade oludugun yerde @Transaction qeyd etmek kifayetdir. Bu zaman bu method ishlediyi vaxt boyunca yalniz bir tranzaksiya achilacaq. save ve update methodlari uchun ayrica tranzaksiya achilmayacaq.

Diger istifadesine baxsaq meselen, update method id e gore tapir ve hemin useri hansisa field ni deyishir. Methodun bashina @Transactional yazmaqla, userRepository nin save methodunu cagirmaqdan user in name i deyishe bilerik


Bu methodu cagirsaq ve hibernate in show_sql parameterine true versek, console da 


gorerik. burada bir save methodunu cagirmadan update prosesi bash verib.

Diger numune ise sadedir. Meselen, User modelinde Phone listi var. Eger bu field in fetchType i Eager deyilse, bunu alacagimiz zaman xeta bash verecek. Problemi 2 usulla hell etmek olar, ya Eager yazmaqla ve ya hal hazirda oldugumuz methodun bashina @Transactional yazmaqla. 
2ci halda yalniz biz onu cagiracagimiz zaman query run olacaq. Buna sebeb ise method ishlediyi vaxt boyunca tranzaksiyanin aciq qalmasidir

===================

meselen OneToMany elaqeli bir entity var . 
            Address 1
         /
User --- Address 2
         \
            Address 3

User save ederken, Addresleri de onunla birlikde save etmek uchun user de join olunan field i cascade olaraq qeyd etmeliyik.

@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Address> addresses;

Comments

Popular posts from this blog

Validation for AZ phone numbers with RegEx in Java

Java necə işləyir, kod nədir ?