Kalıcılık Bağlamı nedir?


109

Java dünyasında ve JPA'da yeniyim. JPA çalışıyordum ve Varlık, sebat gibi birçok yeni terimle karşılaştım. Okurken, Persistence Context'in tam tanımını anlayamadım .

Kimse bunu basit olmayan terimlerle açıklayabilir mi? İçinde kullanılan verilerle ne yapmalı @Entity?

Örneğin, bu tanımı anlamak için çok karmaşık buluyorum:

Bir kalıcılık bağlamı, herhangi bir kalıcı kimlik için benzersiz bir varlık örneği olacak şekilde bir varlık kümesidir.

Yanıtlar:


86

Kalıcılık bağlamı, bazı kalıcılık deposunda (örneğin bir veritabanı) saklanacak verileri tutan bir dizi varlığı idare eder. Özellikle bağlam, bir varlığın hem bağlam hem de temelde yatan kalıcılık deposu ile ilişkili olarak sahip olabileceği farklı durumların (örneğin yönetilen, ayrılan) farkındadır.

Hibernate ile ilgili olmasına rağmen (bir JPA sağlayıcı), bu bağlantıların yararlı olduğunu düşünüyorum:

http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html/ch03.html

http://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/architecture.html

Java EE'de, bir kalıcılık içeriğine normalde bir EntityManager aracılığıyla erişilir.

http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html

Bir varlığın sahip olabileceği çeşitli durumlar ve bunlar arasındaki geçişler aşağıda açıklanmıştır:

http://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/objectstate.html

http://gerrydevstory.com/wp-content/uploads/2012/05/jpa-state-transtition.png


hmmm, şimdi mantıklı. Kapsayıcı tarafından yönetilen ve uygulama tarafından yönetilen Varlık Yöneticileri arasındaki farkı söyleyen benzer bir "Basit" tanımınız var mı?
Amrit

4
konteyner vs uygulama sadece temel olarak Entity Manager'ın nerede oluşturulduğunu söyler - bir konteynerin dışında veya uygulamanın içinde.
uiron

66
  1. Varlıklar, kalıcılık bağlamı kullanılarak javax.persistence.EntityManager örneği tarafından yönetilir .
  2. Her EntityManager örneği, bir kalıcılık bağlamıyla ilişkilendirilir .
  3. İçinde kalıcılık bağlamında , varlık örnekleri ve bunların yaşam döngüsü yönetilmektedir.
  4. Kalıcılık bağlamı , altında belirli varlık örneklerinin oluşturulduğu, sürdürüldüğü ve kaldırıldığı bir kapsamı tanımlar .
  5. Bir kalıcılık bağlamı bir gibidir cache kümesi içerir kalıcı varlıkları sonra hikaye işlem tamamlandığında , tüm kalıcı nesneler kopanlar EntityManager en kalıcılık bağlamında ve artık yönetilir.

1
EclipseLink'in bir işlem bittikten sonra varlıkları
ayırmadığını buldum

Konteyner tarafından yönetilen kalıcılık bağlamının önbelleği yalnızca işlem süresince kalacaktır. Bir işlemde okunan varlıklar, işlemin tamamlanmasından sonra ayrılacak ve sonraki işlemlerde düzenlenmek için birleştirilmeleri gerekecek. EclipseLink . @RayHulha
pritam kumar

4
@pritamkumar, kalıcılık bağlamı kavramını iyi açıkladınız. Bir EntityManager nesnesini enjekte etmek ve enjekte edilen nesnenin kapsamını (örneğin bir işlem) belirlemek için kullanılan javax.persistence.PersistenceContext ek açıklamasının da olduğunu eklemeliyim.
Paulo Merson

30

Alındığı bu sayfada:

İşte JPA dünyasının kısa bir hile sayfası:

  • Önbellek, verilerin bir kopyasıdır; kopya, veritabanından alınmış ancak veritabanının dışında yaşayan anlamına gelir.
  • Bir Önbelleği Temizleme, değiştirilmiş verileri veritabanına geri koyma eylemidir.
  • PersistenceContext, esasen bir Önbellektir. Ayrıca kendi paylaşılmayan veritabanı bağlantısına sahip olma eğilimindedir.
  • Bir EntityManager, bir PersistenceContext'i (ve dolayısıyla bir Önbelleği) temsil eder
  • Bir EntityManagerFactory bir EntityManager oluşturur (ve dolayısıyla bir PersistenceContext / Cache)

bir PersisnteceContext herhangi bir EntityManager örneğine sahip olabilir mi? Ve bir Varlık Yöneticisi herhangi bir PersistenceContext'e sahip olabilir mi? PersisntenceContext tüm uygulamalar için yalnızca bir tanesidir?
Roberto

7

Bir kalıcı içerik verileri tutmak ve bir veritabanı gibi bazı kalıcı depolama kalıcı için kalifiye kişiler temsil eder. commitBu varlıkların bağlı olduğu bir oturum altındaki bir işlemi yaptığımızda , Hibernate kalıcı içeriği temizler ve bunlardaki değişiklikler ( ekleme / kaydetme, güncelleme veya silme ) kalıcı depolamada kalır.


7

Hem org.hibernate.SessionAPI hem de API javax.persistence.EntityManager, kalıcı verilerle başa çıkmak için bir bağlamı temsil eder.

Bu kavrama kalıcılık bağlamı denir . Kalıcı verilerin hem kalıcılık bağlamı hem de temel alınan veritabanıyla ilişkili bir durumu vardır.


5

"Belirli bir zamanda bir varlık yöneticisi vakası tarafından yönetilen bir dizi kalıcı (varlık) örnek", kalıcılık bağlamı olarak adlandırılır.

JPA @Entity ek açıklaması kalıcı bir varlığı gösterir.

JPA Tanımına buradan bakın


4

Meslekten olmayan terimlerle, Persistence Context'in varlıkların yönetildiği bir ortam olduğunu, yani "Varlığı" veritabanı ile senkronize ettiğini söyleyebiliriz.


3

@Pritam kumar iyi bir genel bakış sunsa da 5. nokta doğru değil.

Kalıcılık Bağlamı, İşlem Kapsamlı olabilir - işlemin uzunluğu boyunca Kalıcı Bağlam 'ömür' veya Genişletilmiş - Kalıcılık Bağlamı birden çok işlemi kapsar.

https://blogs.oracle.com/carolmcdonald/entry/jpa_caching

JPA'nın EntityManager ve Hibernate's Session, genişletilmiş bir Kalıcılık Bağlamı sunar.


Merhaba user2771889, Haklısın Kalıcılık bağlamının genişletilmiş kapsamından bahsetmedim. 5. nokta sadece işlem kapsamlı kalıcılık bağlamıyla ilgiliydi.
pritam kumar

2

Persistence Context , varlık örneklerinin (verileri tutabilen ve dolayısıyla bir veritabanında kalıcı olma yeteneğine sahip olan) Varlık Yöneticisi tarafından yönetildiği bir ortam veya önbellektir . Varlığı veritabanı ile senkronize eder. @Entity ek açıklamasına sahip tüm nesneler ısrarcı olmak. @Entity , veritabanı ile iletişim kurmak için nesneler oluşturmamıza yardımcı olan bir sınıftan başka bir şey değildir ve nesnelerin iletişim kurma şekli yöntemleri kullanmaktır ve bu yöntemleri sağlayan kişi Varlık Yöneticisi'dir.


1
Bu yanıtın mevcut yanıtlardan farkı nedir?
Akin Okegbile
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.