SORU
1 Temmuz 2009, ÇARŞAMBA


JPA EntityManager: kullan ısrar Niye() Birleştir()?

EntityManager.merge() yeni nesne eklemek ve mevcut olanları güncelleyebilirsiniz.

Neden bir persist() yalnızca yeni nesneler oluşturmak () kullanmak isteyeyim?

CEVAP
1 Temmuz 2009, ÇARŞAMBA


Her iki şekilde de bir PersistenceContext bir varlık katacak, fark, varlık ile daha sonra ne olduğunu.

Kalıcı bir varlık örnek alır, içerik ekler ve bu örneği başardı (varlık yani gelecekteki güncellemeler takip edilecek) yapar.

Birleştirme senin varlığın yeni bir örneğini oluşturur, verilen varlık durumunu kopyalar, ve yeni bir kopyasını yönetilen yapar. Senin geçtiğin örneği (yaptığınız değişiklikler yeniden birleştirme çağrısı sürece, bu işlemin bir parçası olacaktır) yönetilmez.

Belki bir kod örneği yardımcı olacaktır.

MyEntity e = new MyEntity();

// scenario 1
// tran starts
em.persist(e); 
e.setSomeField(someValue); 
// tran ends, and the row for someField is updated in the database

// scenario 2
// tran starts
e = new MyEntity();
em.merge(e);
e.setSomeField(anotherValue); 
// tran ends but the row for someField is not updated in the database
// (you made the changes *after* merging)

// scenario 3
// tran starts
e = new MyEntity();
MyEntity e2 = em.merge(e);
e2.setSomeField(anotherValue); 
// tran ends and the row for someField is updated
// (the changes were made to e2, not e)

Senaryo 1 ve 3 kabaca eşdeğerdir, ama Senaryo 2 kullanmak istediğiniz bazı durumlar vardır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BlackBoxTV

    BlackBoxTV

    7 Mayıs 2007
  • Facebook Developers

    Facebook Dev

    24 ŞUBAT 2009
  • MandMEvangelists

    MandMEvangel

    28 Ocak 2008