Hibernate ve JPA
SQL'i sen yazmıyorsun, ama o yazılıyor
ID üretimi ve batch insert, flush sırası, cascade ve ilişkinin sahibi, entity eşitliği, ikinci seviye cache ve toplu güncellemeler. Hibernate'in arka planda hangi SQL'i, ne zaman gönderdiğini görmek.
12 ders 102 dk toplam süre Sertifikan
Bu konunun dersleri şu çalışma yollarında: Veriyle Barışmak (12) , Adım Adım Backend (3)
Orta
- 1/3 yıldız2/3 yıldız3/3 yıldız ID Üretimi ve Batch Insert — 200 Satır Kaç Gidiş Dönüş? IDENTITY ile her yeni satırın numarası ancak veritabanına yazılınca belli olur, bu yüzden Hibernate satırları tek tek gönderir. Sequence ise numaraları 50'şerlik bloklarla önceden alır ve toplu yazmaya izin verir. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Flush ve SQL Sırası — save() Satırında Neden Hiçbir Şey Olmuyor? save() dediğinde veritabanına hemen bir şey gitmez; değişiklik bir listeye yazılır. Liste sonra toplu gönderilir, üstelik senin sıranla değil: önce eklemeler, en son silmeler. Hatalar da o an ortaya çıkar. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Cascade ve İlişkinin Sahibi — Kalem Gerçekten Eklendi mi? Sipariş ile kalemleri iki yönden birbirini tanır, ama veritabanına yalnızca biri yazar: kalemdeki @ManyToOne. Öbür taraf sadece bir aynadır. Cascade kaydetmeyi taşır, orphanRemoval da listeden çıkanı siler. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Entity equals ve hashCode — Aynı Sipariş mi? Bir entity'nin id'si kaydedilince değişir, alanları değişir, bazen sahte bir vekil nesne (proxy) olarak gelir. equals ve hashCode bunların hepsinde aynı cevabı vermeli: ya hiç değişmeyen bir anahtar, ya da id + sabit hashCode. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Toplu UPDATE — Veritabanı Değişti, Nesnen Neden Haberi Yok? ✦ yeni @Modifying ile yazılan toplu UPDATE doğrudan veritabanında çalışır ve bellekteki nesneleri atlar. Nesne eski değeri gösterir; kirlenirse o eski değeri geri bile yazabilir. Çaresi context'i temizlemek. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız join fetch ve Sayfalama — 10 Sipariş İçin Bütün Tablo ✦ yeni Koleksiyonu join fetch ile çekip aynı sorguyu sayfalarsan Hibernate LIMIT'i SQL'den çıkarır ve sayfayı bellekte keser. Doğrusu iki küçük sorgu: önce sayfanın id'leri, sonra yalnızca onların detayı. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Kalıtım Stratejileri — Üç Ödeme Türü, Kaç Tablo? ✦ yeni Java'daki bir sınıf ağacını tabloya dökmenin dört yolu var: tek tablo, ortak tablo ve ekler, türe göre ayrı tablo, ya da yalnızca ortak alanları paylaşmak. Her biri bir soruyu ucuzlatır, bir başkasını pahalılaştırır. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Soft Delete — Silinen Hesap Gerçekten Gitti mi? ✦ yeni Bankada bir kaydı gerçekten silmek çoğu zaman yasaktır: denetçi yıllar sonra sorabilir. Soft delete satırı silmek yerine işaretler. Ama işaret her sorguda süzülmezse silinen satır geri gelir, benzersiz indeksler de eski satıra takılır. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Dinamik Sorgu — Filtre Ekranı Bir Kapıya Dönüşmesin ✦ yeni Müşteri filtrelerin istediğini doldurur, istediğini boş bırakır. Sorguyu metin birleştirerek kurmak SQL injection kapısı açar, her kombinasyona bir metot yazmak sayıyı katlar. Çözüm: filtre başına bir Specification parçası. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Enum Eşleme — Bloklu Kart Neden Bir Gün Dondurulmuş Göründü? ✦ yeni JPA varsayılan olarak enum'un sıra numarasını yazar. Araya bir değer eklenince eski satırlar sessizce başka bir durumla okunur. İsimle yazmak eklemeye, sabit kodlu bir AttributeConverter ise yeniden adlandırmaya da dayanır. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Kiracı Ayrımı — A Bankasının Müşterisi B Bankasının Verisini Görmesin ✦ yeni Birçok bankaya hizmet veren bir platformda bütün satırlar aynı tablolardadır. Elle yazılan kiracı koşulu bir gün unutulur; @TenantId Hibernate sorgularını korur ama native SQL'i değil. Row-level security ayrımı verinin kendisine koyar. 8 dk