动态更改持久性单元 – 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)和插件集成测试。
- 使用
- JPA的类加载器