REFRESH ve MERGE, veritabanları açısından ne anlama geliyor?


94

Merak ediyorum ve bu yanıtı hızlı bulmam gerekiyor. Google pek yardımcı olmayacak.

Java Persistence API, çerçeveye ilişkili varlıklar üzerindeki işlemleri basamaklandırmasını söyleyen şu özelliklere sahiptir:

CascadeType.PERSIST
CascadeType.DELETE
CascadeType.MERGE
CascadeType.REFRESH

İlk ikisinin ne anlama geldiğini biliyorum: B'ye sahip olan A nesnesini kalıcı hale getirdiğimde, B'yi de sürdürürsem ve A'yı sildiğimde B'yi de silin.

Ama diğer ikisinin ne başardığını anlayamıyorum. Yardım?

Yanıtlar:


80

REFRESH "herhangi bir durum değişikliğini veritabanından temsilime çek" anlamına gelir. Bunu basamaklamak basittir; bu, tüm ilişkili varlıkların yenilendiği anlamına gelir.

BİRLEŞTİRME, "kaydet" e yaklaşan, ancak daha çok "bu ayrılmış varlığı yönetilen duruma geri gönder ve durum değişikliklerini kaydet" gibi karmaşık bir şey anlamına gelir; Basamaklama, tüm ilişkili varlıkların aynı şekilde geri itileceği anlamına gelir ve geri aldığınız .merge()yönetilen varlık idaresi, kendisiyle ilişkilendirilmiş tüm yönetilen varlıklara sahiptir.

İlgili belgelerin bir örneğine bağlantı verin


1
Varsayılan nedir (herhangi bir CascadeType ayarlamadıysak) ve ayarlanması en mantıklı / en yaygın olanı nedir?
Rosdi Kasim

@Rosdi Kasim: Öntanımlı olarak CascadeTypeboş bir dizi.
user1438038

@chaos bu yüzden yenile, ebeveyn güncellendiğinde / yenilendiğinde çocukları veritabanında bulunanlarla eşleşecek şekilde günceller. Birleştirme, temelde, üst öğe ile alt öğeleri yansıtmak için veritabanındaki alt öğelerdeki güncellenmiş alanların üzerine yazacaktır. Peki her ikisi de kullanılırsa ne olur? Sanırım bunu yanlış anladım.
Jordan Mackie

88

JPA Ek Açıklamasının Çoktan çoğa ilişkinin anlamı :

  • TÜMÜ - kaynak varlık üzerinde gerçekleştirilen tüm olası basamaklı işlemler, ilişkilendirmenin hedefine kademelendirilir.
  • BİRLEŞTİRME - kaynak varlık birleştirilirse, birleştirme, ilişkilendirmenin hedefine basamaklanır.
  • PERSIST - kaynak varlık kalıcıysa kalıcı, ilişkilendirmenin hedefine basamaklanır.
  • REFRESH - kaynak varlık yenilenirse, yenileme, ilişkilendirmenin hedefine basamaklanır.
  • KALDIR - kaynak varlık kaldırılırsa, ilişkilendirmenin hedefi de kaldırılır.

Ben kendim onları şu şekilde görüyorum (daha okunaklı):

  • BİRLEŞTİR - mevcut nesneler için, tablodaki mevcut verileri nesnemdeki verilerle birleştirmek için. (veritabanına senkronize et)
  • PERSIST - veritabanındaki nesneden yeni kayıtlar oluşturur.
  • REFRESH - nesnedeki verileri yenilemektir. Veritabanında senkronize edilmesi gereken bir değişiklik olabilir. (veritabanından senkronizasyon)
  • KALDIR - silmektir.

1
Ek açıklamalar için Javadoc benim için hiçbir şeyi netleştirmedi. Cevap için teşekkürler!
André Chalella
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.