是否有可能从persistence.xml中共享配置?
-
26-09-2019 - |
题
我一个持久性单元在我的persistence.xml配置,但是我有两个数据库。这些数据库是相同的,对于架构。我所试图做的是:
Persistence.createEntityManagerFactory("unit", primaryProperties);
Persistence.createEntityManagerFactory("unit", secondaryProperties);
属性包含不同的连接设置(用户名,密码,JDBC URL,...)。结果 其实,我尝试这样做,似乎休眠(我的JPA提供者)返回相同的情况下在第二个电话,没有考虑属性的照顾。
我是否需要将配置复制到第二单元?
我钉下来到不同的东西,比我以前的想法。该EntityManagers(和工厂)返回通过上述工作的呼吁符合市场预期,但getDelegate()
似乎是问题。我需要让我的应用程序直接依赖于Hibernate的API底层会议,以支持传统的代码。我所做的是:
final Session session = (Session) manager.getDelegate();
但不知何故我使用其中在所述第二操作一个EntityManager时接收主数据库上的会话的操作连。
解决方案
这是很奇怪。根据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;
}
和我是绝对不会得到相同的情况下,在这个虚拟的测试:
@Test
public void testCreateTwoDifferentEMF() {
Map properties1 = new HashMap();
EntityManagerFactory emf1 = Persistence.createEntityManagerFactory("MyPu", properties1);
Map properties2 = new HashMap();
properties2.put("javax.persistence.jdbc.user", "foo");
EntityManagerFactory emf2 = Persistence.createEntityManagerFactory("MyPu", properties2);
assertFalse(emf1 == emf2); //passes
}
实际上,它只是工作(与第二个实例是使用重写的属性)。
不隶属于 StackOverflow