Java (Spring Boot) Orta Seviye Veritabanı & ORM

Hibernate 1st Level vs 2nd Level Cache & N+1 Çözümü

Aynı nesneyi aynı transaction içinde veritabanından tekrar tekrar sormayı önleyen tampon bellek.

5 Yaşındaki Çocuğa Anlatır Gibi (Analoji)

1st Level Cache: Masanda önünde açık duran defterdir (aynı oturumda ona bakarsın). 2nd Level Cache: Şirketin ortak arşiv odasıdır (tüm çalışanlar oradaki ortak kopyayı okur).

Teknik & Mimari Tanım

First-Level Cache Hibernate Session bazlıdır ve kapatılamaz; aynı transaction içindeki aynı ID'li entity veritabanına gitmeden belleğe döner. Second-Level Cache ise SessionFactory bazlı olup tüm uygulama genelinde paylaşılır (Redis, Hazelcast, Ehcache entegre edilir).

Mülakatta Ne Demelisin? (Kurtarıcı Altın Cevap)

“1st level cache Session seviyesinde varsayılan açıktır. N+1 sorununu çözmek için JPQL JOIN FETCH veya @EntityGraph kullanılır. Dağıtık mimarilerde okuma performansını uçurmak için 2nd level cache (Ehcache/Redis) devreye alınır.”

Java (Spring Boot) Örnek Uygulaması
@Query("SELECT u FROM User u JOIN FETCH u.orders WHERE u.active = true")
List<User> findAllActiveWithOrders(); // N+1 sorgusunu 1 tek JOIN'e indirir!
Mülakat Tuzağı & Adayların En Sık Yaptığı Hata:

FetchType.EAGER kullanarak her ilişkide gereksiz devasa tabloları JOIN yapmak. Standart her zaman FetchType.LAZY olmalıdır.