SessionFactory
vs. EntityManagerFactory
Hazırda Bekletme Kullanıcı Kılavuzu'nda açıkladığım gibi, Hazırda Bekletme aşağıdaki diyagramda gösterildiği gibi SessionFactory
JPA'yı genişletir EntityManagerFactory
:
Yani, SessionFactory
aynı zamanda bir JPAEntityManagerFactory
.
Hem ve SessionFactory
hem de EntityManagerFactory
varlık eşleme meta verilerini içerir ve Hazırda Beklet Session
veyaEntityManager
.
Session
vs. EntityManager
Tıpkı SessionFactory
ve EntityManagerFactory
gibi, Hibernate Session
de JPA'yı genişletir EntityManager
. Yani, tarafından tanımlanan tüm yöntemler EntityManager
Hazırda Bekletme modunda kullanılabilirSession
.
Ve Session
EntityManager varlık durumu geçişlerini SELECT, INSERT, UPDATE ve DELETE gibi SQL deyimlerine çevirir .
Hazırda Beklet ve JPA önyükleme
Bir JPA veya Hazırda Bekletme uygulamasını önyüklerken iki seçeneğiniz vardır:
- Hazırda Beklet yerel mekanizması aracılığıyla önyükleme yapabilir
SessionFactory
ve BootstrapServiceRegistryBuilder
. Spring kullanıyorsanız, Hibernate bootstrap, bu GitHub örneğindeLocalSessionFactoryBean
gösterildiği gibi the aracılığıyla yapılır .
- Veya sınıf ya da
EntityManagerFactory
aracılığıyla bir JPA oluşturabilirsiniz . Spring kullanıyorsanız, JPA önyükleme işlemi bu GitHub örneğinde gösterildiği gibi the aracılığıyla yapılır .Persistence
EntityManagerFactoryBuilder
LocalContainerEntityManagerFactoryBean
JPA ile önyükleme tercih edilecektir. JPA Çünkü FlushModeType.AUTO
mirası çok daha iyi bir seçimdir FlushMode.AUTO
, sonları okuma-senin-yazar yerel SQL sorguları için tutarlılık .
Hazırda Bekletme modunu açmak için JPA'yı açma
Ayrıca, JPA ile önyükleme yaparsanız EntityManagerFactory
ve @PersistenceUnit
ek açıklama yoluyla enjekte ettiyseniz :
@PersistenceUnit
private EntityManagerFactory entityManagerFactory;
Yöntemi Sessionfactory
kullanarak temel bilgilere kolayca erişebilirsiniz unwrap
:
SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
Aynı şey JPA için de yapılabilir EntityManager
. Ek açıklama EntityManager
yoluyla enjekte ederseniz @PersistenceContext
:
@PersistenceContext
private EntityManager entityManager;
Yöntemi Session
kullanarak temel bilgilere kolayca erişebilirsiniz unwrap
:
Session session = entityManager.unwrap(Session.class);
Sonuç
Bu nedenle, JPA üzerinden önyükleme yapmalı EntityManagerFactory
ve EntityManager
ve işlevlerini kullanmalı ve yalnızca varlığın doğal tanımlayıcısı aracılığıyla getirilmesi gibi JPA'da bulunmayan Hazırda Bekleme özgü yöntemlere erişmek istediğinizde bunları ilişkili Hazırda Bekletme arabirimlerine açmalısınız .