【问题标题】:Creating EntityManagerFactory from hibernate Configuration从休眠配置创建 EntityManagerFactory
【发布时间】:2015-07-19 10:17:00
【问题描述】:

在我们当前的应用程序 (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?

【问题讨论】:

  • 这个问题你解决了吗?你的解决方案是什么?
  • 完全迁移到 JPA - 这比我们提出的任何中间解决方案都容易。
  • 啊哈,所以我想你没有使用休眠拦截器,对吧?我有这个问题似乎没有得到任何答案:stackoverflow.com/questions/32696237/…

标签: java hibernate jpa entitymanager sessionfactory


【解决方案1】:

这很简单。不过,您将需要一个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(反之亦然),则可以使用此方法:

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

【讨论】:

  • 最后一部分应该使用 unwrap() 方法而不是显式转换。
  • 我认为它有效,但不幸的是,这不提供已注册的实体:/ 我注定要使用带有指定实体的 persistence.xml 文件:/。
  • 这就是我的意思:“不过,您需要一个 persistence.xml,在其中为 JPA 定义了一个持久性单元。”。您必须以某种方式告诉 JPA 哪些实体要持久化。
猜你喜欢
  • 2019-01-13
  • 2017-06-23
  • 2022-06-27
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 2015-07-28
  • 2016-05-06
  • 2018-10-21
相关资源
最近更新 更多