2015-05-08 31 views
7

Geçerli uygulamamızda (Java SE), Hazırda Bekletme özel API'sini kullanıyoruz, ancak mümkün olan her yerde (ancak yavaşça) JPA'ya geçiş yapmak istiyoruz. Bunun için SessionFactory yerine EntityManagerFactory'a ihtiyacım var (ve bunu anlaşmazlık olmaksızın bir aksiyom olarak tutmak istiyorum).Hazırda bekletme modundan yapılandırma EntityManagerFactory Yapılandırma

Sorun şu ki, şu anda oturum fabrikamız org.hibernate.cfg.Configuration'dan itibaren oluşturuluyor ve şu anki haliyle bunu korumak istiyorum - bu konfigürasyon yazılımımızın farklı bölümlerinden geçerek kalıcılığı yapılandırabilir ve yapılandırabilir istedikleri gibi.

Yani soru şu: Ben EntityManagerFactory sonuçlanan

ServiceRegistry serviceRegistry = new ServiceRegistryBuilder() 
            .applySettings(hibConfiguration.getProperties()) 
            .buildServiceRegistry(); 
SessionFactory sessionFactory = hibConfiguration.buildSessionFactory(serviceRegistry); 

eşdeğer hale nasıl?

+0

bu sorunu çözdü mü: Eğer EntityManagerFactory (tersi) den SessionFactory gerekiyorsa

public EntityManagerFactory createEntityManagerFactory(Configuration hibConfiguration) { Properties p = hibConfiguration.getProperties(); // convert to Map Map<String, String> pMap = new HashMap<>(); Enumeration<?> e = p.propertyNames(); while (e.hasMoreElements()) { String s = (String) e.nextElement(); pMap.put(s, p.getProperty(s)); } // create EntityManagerFactory EntityManagerFactory emf = Persistence.createEntityManagerFactory("some persistence unit", pMap); return emf; } 

, o zaman bu yöntemi kullanabilir? Çözümün neydi? JPA'ya tamamen geçiş yapan –

+0

- bizim aradığımız herhangi bir ara çözümden daha kolaydı. – psychollek

+0

Aha, bu yüzden hazırda bekletme aramayı kullanmıyorsunuz demektir, tamam mı? Herhangi bir cevap çekmeyen bu soruya sahibim: http://stackoverflow.com/questions/32696237/jpa-with-hibernate-5-programmatically-create-entitymanagerfactory –

cevap

2

Bu oldukça basittir. Bununla birlikte, JPA için bir kalıcılık birimi tanımladığınız bir persistence.xml gerekir. Daha sonra, Hazırda Bekletme özelliklerini Map'a dönüştürmeniz gerekir, böylece bunları createEntityManagerFactory yöntemine iletebilirsiniz. Bu, Hazırda Bekletme özelliklerini kullanarak EntityManagerFactory'u verecektir.

public SessionFactory getSessionFactory(EntityManagerFactory entityManagerFactory) { 
    return ((EntityManagerFactoryImpl) entityManagerFactory).getSessionFactory(); 
} 
+1

Son bölüm unwrap() yöntemini kullanmalıdır açık döküm yerine. –

+0

Çalıştığını düşündüm ama maalesef bu kayıtlı olanları sağlamaz:/persistence.xml dosyaları belirtilen varlıklar ile mahkum oldum: /. – psychollek

+0

Bu benim kastettiğim şey: * "JPA için bir kalıcılık birimi tanımladığınız halde, bir persistence.xml dosyasına ihtiyacınız olacak." *. Bir şekilde JPA'ya hangi varlıkların devam edeceğini söylemelisiniz. – MicSim