[英]NullPointerException & Error creating bean with name 'entityManagerFactory' from Hibernate Configuration class (using spring data jpa)
[英]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;
}
如果您需要EntityManagerFactory
的SessionFactory
( EntityManagerFactory
),那么您可以使用此方法:
public SessionFactory getSessionFactory(EntityManagerFactory entityManagerFactory) {
return ((EntityManagerFactoryImpl) entityManagerFactory).getSessionFactory();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.