动态更改持久性单元 – JPA

persistence.xml中的持久性单元是在构建应用程序期间创建的。 由于我想在运行时更改数据库URL,有没有办法在运行时修改持久性单元? 我应该在分发后使用除预绑定之外的不同数据库。

我正在使用EclipseLink(JPA 2.1)

保持持久性单元文件(Persistence.xml)不变。 您可以按如下方式覆盖其中的属性。

EntityManagerFactory managerFactory = null; Map persistenceMap = new HashMap(); persistenceMap.put("javax.persistence.jdbc.url", ""); persistenceMap.put("javax.persistence.jdbc.user", ""); persistenceMap.put("javax.persistence.jdbc.password", ""); persistenceMap.put("javax.persistence.jdbc.driver", ""); managerFactory = Persistence.createEntityManagerFactory("", persistenceMap); manager = managerFactory.createEntityManager(); 

您可以使用Persistence.createEntityManagerFactory(Map)传递属性以选择数据库URL和其他设置。

在长期会话体系结构中,您应该创建一个Plug-in-Framework。

因此,您需要创建不同的Thread-Group和Class-Repository。

这可能是您的Class-Loader-Tree

  • System-Class-Loader(通常是URLClassLoader,包含实体)
    • JPA的类加载器
      • 使用persistence.xml加载jpa.jar ,从Application-Class-Loader指定Database-Configuration
      • 实施您的entityManager / session-factory。
      • 加载使用DataBase所需的任何插件。 执行unit testing(; D)和插件集成测试。