从休眠配置创建 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
方法。这将为您提供 EntityManagerFactory
使用您的 Hibernate 属性。
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
(反过来),那么你可以使用这个方法:
public SessionFactory getSessionFactory(EntityManagerFactory entityManagerFactory) {
return ((EntityManagerFactoryImpl) entityManagerFactory).getSessionFactory();
}
在我们当前的应用程序 (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
方法。这将为您提供 EntityManagerFactory
使用您的 Hibernate 属性。
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
(反过来),那么你可以使用这个方法:
public SessionFactory getSessionFactory(EntityManagerFactory entityManagerFactory) {
return ((EntityManagerFactoryImpl) entityManagerFactory).getSessionFactory();
}