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

  • Adam Khoury

    Adam Khoury

    23 Ocak 2008
  • Kanaal van Dj0fifty

    Kanaal van D

    28 EKİM 2011
  • Gee Cee

    Gee Cee

    1 AĞUSTOS 2009