是否可以从persistence.xml共享配置?

时间:2010-08-31 19:10:27

标签: java hibernate jpa persistence.xml persistence-unit

我在persistence.xml中配置了一个持久性单元,但我有两个数据库。关于模式,这些数据库是相同的。我想做的是:

Persistence.createEntityManagerFactory("unit", primaryProperties);
Persistence.createEntityManagerFactory("unit", secondaryProperties);

属性包含不同的连接设置(用户,密码,jdbc url,...) 我实际上尝试了这个,似乎hibernate(我的jpa提供者)在第二次调用中返回相同的实例,而不需要处理属性。

我是否需要将配置复制到第二个单元?


我把它钉在了不同于我以前想过的东西上面。上述调用返回的EntityManagers(和Factories)按预期工作,但getDelegate()似乎是问题所在。我需要获得底层会话以支持我的应用程序中的遗留代码,该代码直接依赖于hibernate api。我做的是:

final Session session = (Session) manager.getDelegate();

但不知何故,即使使用在第二个数据库上运行的实体管理器,我也会收到在主数据库上运行的会话。

1 个答案:

答案 0 :(得分:3)

这很奇怪。根据{{​​1}}的来源,该方法返回一个新实例:

HibernateProvider#createEntityManagerFactory

我绝对不会在这个虚拟测试中得到相同的实例:

public EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map properties) {
    Ejb3Configuration cfg = new Ejb3Configuration();
    Ejb3Configuration configured = cfg.configure( persistenceUnitName, properties );
    return configured != null ? configured.buildEntityManagerFactory() : null;
}

实际上,它只是起作用(第二个实例是使用重写的属性)。