Bahar verilerinde Save ve SaveAndFlush arasındaki fark JPA


131

Bazı CRUD işlemlerini şu yolla test ederek bahar verilerini JPA öğrenmeye çalışıyorum JpaRepository .

İki yöntemle karşılaştım saveve saveAndFlush. Bu ikisi arasındaki farkı anlamıyorum. Çağrımda saveda değişikliklerim veritabanına kaydediliyor, bu yüzden ne işe yarar saveAndFlush.

Yanıtlar:


139

On saveAndFlush, değişiklikler bu komutta derhal DB'ye aktarılacaktır. İle save, bu kadar zaman doğru olmayabilir ve bellekte sadece kalmak olabilir flushya dacommit komutlar verilir.

Ama işlem değişiklikleri temizlemek ve onları taahhüt olmasa bile, değişiklikler yine bilin olmayacak bu işlemde taahhüt kadar dışarıda işlemlere görülebilir.

Sizin durumunuzda, muhtemelen commither şey yolunda giderse sizin için komut veren bir tür işlem mekanizması kullanıyorsunuzdur .


35
"Bu işlemdeki taahhüt edilene kadar dış işlemler tarafından görülmez" Diğer işlemlerin izolasyon düzeyine bağlıdır. Bir işlemin izolasyon seviyesi READ_UNCOMMITTED , ise, o zaman neyin temizlendiğini ancak diğer işlemler tarafından henüz gerçekleştirilmediğini görecektir.
Gab 是 好人

1
ancak, projemde, save (), saveAll () kullanıyorum ve açıkça commit veya flush çağrısı yapmadan DB'de devam ediyor. O halde neden saveAndFlush'ı tercih etmeliyim? Flaş modu tüm bunlar varsayılan modda
P Satish Patro

37

Kullandığınız hazırda bekletme temizleme moduna bağlı olarak ( AUTOvarsayılandır) savedeğişikliklerinizi hemen DB'ye yazabilir veya yazmayabilir. Aradığınızda saveAndFlush, model durumunuzun DB ile senkronizasyonunu zorlarsınız.

AUTO temizleme modunu kullanırsanız ve uygulamanızı önce verileri kaydetmek ve ardından tekrar seçmek için kullanıyorsanız, arasında bahvior'da bir fark görmezsiniz save()ve saveAndFlush()select önce bir sifonu tetikler. Belgelere bakın .


üzgünüm ama ben savebir varlık ve yine aynıysam save, ikinci komutla, örneğin çoğaltma için bir istisna atmayacağını mı kastediyorsunuz ?
azerafati

3
@Bludream Evet, anladığım kadarıyla çağrıların saveidempotent olduğu anlaşılıyor . Daha fazla ayrıntı için bu ileti dizisine bakın.
Ralf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.