Eager & Lazy Fetch Type

eager-lazy-fetch-type (büyük resim için tıklayın)

Spring Boot'ta (ve genel olarak Hibernate veya JPA'da) fetch type (veri çekme tipi), bir ilişkisel veritabanından verilerin nasıl alınacağını kontrol etmek için kullanılır. Fetch type, ilişkili varlıkların (entity'lerin) yüklenme zamanını belirler. JPA'da iki tür fetch type vardır:

1. EAGER (Hemen Yükleme)

  • İlişkili veriler anında yüklenir, yani ana varlık yüklendiğinde ilişkili varlıklar da hemen belleğe alınır.
  • İlişkili varlık ne kadar büyük olursa, performansa o kadar olumsuz etkisi olabilir.
  • Özellikle, gereksiz ilişkili verileri yüklemek istemediğiniz durumlarda dikkatli kullanılmalıdır.

@OneToMany(fetch = FetchType.EAGER)

private List<Order> orders;

Özellikler:

  • Daha fazla bellek kullanımı.
  • Genellikle, küçük ilişkilerde veya her zaman ihtiyaç duyulan verilerde kullanılır.

2. LAZY (Tembel Yükleme)

  • İlişkili veriler, gerektiğinde yüklenir. Ana varlık yüklendiğinde ilişkili veriler yüklenmez; ancak ilişkiye ilk erişimde yükleme yapılır.
  • Daha az bellek kullanır ve performansı artırabilir.
  • Ancak, ilişkili veriye erişim sırasında LazyInitializationException alabilirsiniz (örneğin, session kapalıysa).

@OneToMany(fetch = FetchType.LAZY)

private List<Order> orders;

Özellikler:

  • Daha az başlangıç yükü.
  • Büyük veri setleri için önerilir.
  • Verilere ihtiyaç duyulana kadar yüklenmez.

Varsayılan Fetch Tipleri

Her ilişki türü için JPA, varsayılan bir fetch type belirlemiştir:

  • @OneToOne: EAGER
  • @ManyToOne: EAGER
  • @OneToMany: LAZY
  • @ManyToMany: LAZY

Hangi Fetch Type Kullanılmalı?

  • LAZY varsayılan olarak tercih edilir çünkü başlangıçta gereksiz veri yüklenmesini önler.
  • EAGER, yalnızca ilişkili verilerin her zaman gerekli olduğu durumlarda kullanılmalıdır.
  • Büyük veri setleri ve çok karmaşık ilişkilerde performansı optimize etmek için LAZY genellikle daha uygun bir seçenektir.

İlişkiler ve Fetch Type Kullanımı Örneği

 

@Entity

public class User {

   @Id

   @GeneratedValue(strategy = GenerationType.IDENTITY)

   private Long id;

   private String name;

   @OneToMany(mappedBy = "user", fetch = FetchType.LAZY)

   private List<Order> orders;

}

@Entity

public class Order {

   @Id

   @GeneratedValue(strategy = GenerationType.IDENTITY)

   private Long id;

   private String description;

   @ManyToOne(fetch = FetchType.EAGER)

   @JoinColumn(name = "user_id")

   private User user;

}

*Gönderi ve görsel chatgpt ile oluşturulmuştur.

omurs

Ö S, 30 Ağustos 2018 Perşembe 15:30 tarihinde kayıt oldu

Etiketler

Beğeni


Yıllara Göre Gönderiler








LombokLoglamaB2C (Business-to-Consumer)B2B (Business-to-Business)İçerik Yönetim Sistemi - CMS (Content Management System)Pagination (Sayfalama)Sanal Özel Ağ - VPN (Virtual Private Network)Cronjob (Zamanlanmış Görevler)Printer-YazıcıJava'daki İlkel Veri Tipleri ve Alabilecekleri DeğerlerBit & Byte ve Hafıza Boyutlarındaki Ölçüm BirimleriSanallaştırma (Virtualization)DNS KayıtlarıE-Fatura ve E-ArşivYazılım Lisans TürleriAudit (Denetim) Açık Kaynak (Open Source)Monitoring (İzleme)Sitemap & Robots.txtKilometretaşı (Milestone)BSMV (Banka ve Sigorta Muameleleri Vergisi)KKDF (Kaynak Kullanımı Destekleme Fonu)Siber Pazartesi (Cyber Monday)Black Friday (Kara Cuma)Hotlink.htaccessCryptoLockerMalwareTrojanWormDependency (Yazılım Geliştirme Sürecinde Paket Bağımlılığı)Configuration (Yazılım Geliştirme Sürecinde Yapılandırma)Yahoo ve Yahoo'nun Başarısızlık NedenleriArchiving (Yazılım Geliştirme Sürecinde Arşivleme)Görsel Dosya Türleri (Image Types)ReleaseVersioning & Tagging (Versiyonlama ve Etiketleme)BuildJob (Yazılım Geliştirme Sürecinde Görevler)SonarQubeCDATA (Character Data)Alan Adı Uzantıları (Domain Name Extensions)Regresyon Kara Kutu (Black-Box) TestBeyaz Kutu (White-box) TestGri Kutu (Grey-box) TestYazılım Geliştirme Sürecindeki Temel Test TürleriKod gözden geçirme (Code Review)Birim Testi (Unit Testing)Yazılım Sürecinde EntegrasyonJAR & WAREager & Lazy Fetch TypeMaskelemeKPI (Key Performance Indicator)KII (Key Impact Indicator)Projenin JAR Dosyasını Oluştur - JAR PathSunucu için Linux dağıtım SeçimiKonyteynerler (container technologies)Runtime & Compile Time (Çalışma ve Derleme Zamanı)@Anotasyonlar (@Annotations)