簡體   English   中英

從hibernate配置創建EntityManagerFactory

[英]Creating EntityManagerFactory from hibernate Configuration

在我們當前的應用程序(Java SE)中,我們使用Hibernate特定的API,但我們希望盡可能(但慢慢地)遷移到JPA。 為此,我需要EntityManagerFactory而不是SessionFactory (我想保持這個公理沒有爭議)。

問題出在哪里,目前我們的會話工廠是從org.hibernate.cfg.Configuration創建的,我想暫時保留它 - 因為這個配置是通過我們軟件的不同部分傳遞的,可以並且可以配置他們想要的持久性。

所以問題是:我該怎么做

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

等效導致EntityManagerFactory

這很簡單。 但是,您需要一個persistence.xml ,您已經為JPA定義了持久性單元。 然后,您必須將Hibernate屬性轉換為Map ,因此您可以將它們傳遞給createEntityManagerFactory方法。 這將使用您的Hibernate屬性為您提供EntityManagerFactory

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;
}   

如果您需要EntityManagerFactorySessionFactoryEntityManagerFactory ),那么您可以使用此方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM