JPA'da getOne ve findById arasındaki fark?
Spring Data JPA findById() vs getOne(): Farklar ve Performans Karşılaştırması
Spring Boot projelerinde sıkça kullanılan findById() ve getOne() metodları arasındaki farkları, performans etkilerini ve hangi senaryoda hangisini kullanmanız gerektiğini detaylıca öğrenin.
findById() ve getOne() Nedir?
Spring Data JPA içerisinde yer alan findById() ve getOne() metodları, veritabanından veri çekmek için kullanılır. Ancak bu iki metodun çalışma mantığı ve performans davranışı tamamen farklıdır.
getOne() Metodu Nasıl Çalışır?
getOne() metodu, veritabanına doğrudan sorgu atmadan bir proxy nesne döndürür.
Bu metod, arka planda EntityManager.getReference() kullanır.
- Veri hemen çekilmez (Lazy Loading)
- İlk erişimde veritabanına sorgu atılır
- Veri yoksa
EntityNotFoundExceptionfırlatır
findById() Metodu Nasıl Çalışır?
findById() metodu veritabanına anında sorgu gönderir ve gerçek entity nesnesini döndürür.
- Hemen DB sorgusu çalıştırır
Optional<T>döner- Veri yoksa boş döner (null değil!)
- İlişkili verileri yükleyebilir
findById() vs getOne() Karşılaştırması
| Özellik | getOne() | findById() |
|---|---|---|
| Çalışma Tipi | Lazy (Proxy) | Eager (Gerçek veri) |
| DB Sorgusu | İlk erişimde | Hemen |
| Dönüş Tipi | Entity | Optional<Entity> |
| Hata Durumu | Exception | Optional.empty() |
| Performans | Daha hızlı (bazı senaryolarda) | Daha güvenli |
Hangi Durumda Hangisi Kullanılmalı?
- 🔹 Sadece referans gerekiyorsa → getOne()
- 🔹 Gerçek veri gerekiyorsa → findById()
- 🔹 Null kontrolü yapmak istiyorsanız → findById()
- 🔹 Performans kritikse → getOne()