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 SessionFactoryJPA'yı genişletir EntityManagerFactory:

Yani, SessionFactoryaynı zamanda bir JPAEntityManagerFactory .
Hem ve SessionFactoryhem de EntityManagerFactoryvarlık eşleme meta verilerini içerir ve Hazırda Beklet SessionveyaEntityManager .
Session vs. EntityManager
Tıpkı SessionFactoryve EntityManagerFactorygibi, Hibernate Sessionde JPA'yı genişletir EntityManager. Yani, tarafından tanımlanan tüm yöntemler EntityManagerHazırda Bekletme modunda kullanılabilirSession .
Ve SessionEntityManager 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
SessionFactoryve 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
EntityManagerFactoryaracı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 .PersistenceEntityManagerFactoryBuilderLocalContainerEntityManagerFactoryBean
JPA ile önyükleme tercih edilecektir. JPA Çünkü FlushModeType.AUTOmirası ç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 EntityManagerFactoryve @PersistenceUnitek açıklama yoluyla enjekte ettiyseniz :
@PersistenceUnit
private EntityManagerFactory entityManagerFactory;
Yöntemi Sessionfactorykullanarak temel bilgilere kolayca erişebilirsiniz unwrap:
SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
Aynı şey JPA için de yapılabilir EntityManager. Ek açıklama EntityManageryoluyla enjekte ederseniz @PersistenceContext:
@PersistenceContext
private EntityManager entityManager;
Yöntemi Sessionkullanarak temel bilgilere kolayca erişebilirsiniz unwrap:
Session session = entityManager.unwrap(Session.class);
Sonuç
Bu nedenle, JPA üzerinden önyükleme yapmalı EntityManagerFactoryve EntityManagerve 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 .