创建没有persistence.xml的Entity Manager Factory

时间:2013-06-05 12:01:03

标签: jpa eclipselink persistence.xml persistence-unit

有没有办法在没有定义持久性单元的情况下创建 EntityManagerFactory ?您能否提供创建实体经理工厂所需的所有属性?我需要在运行时从用户的指定值创建EntityManagerFactory。更新persistence.xml并重新编译不是一种选择。

目前我正在使用 eclipselink动态持久性,所以我需要创建没有定义持久性单元的EntityManagerFactory?我有一组运行时实体需要在运行时将单个实体组映射到不同的数据库,并且没有持久性单元条目可用于此运行时实体组。

关于如何做到这一点的任何想法都受到欢迎!

2 个答案:

答案 0 :(得分:0)

您最好的选择是最有可能直接访问PersistenceProvider并使用EJB容器API从PersistenceUnitInfo创建EntityManagerFactory。

PersistenceProvider.createContainerEntityManagerFactory()

请参阅, http://www.eclipse.org/eclipselink/api/2.5/org/eclipse/persistence/jpa/PersistenceProvider.html#createContainerEntityManagerFactory%28javax.persistence.spi.PersistenceUnitInfo,%20java.util.Map%29

答案 1 :(得分:-1)

刚刚在DataNucleus文档中看到:

import org.datanucleus.metadata.PersistenceUnitMetaData;
import org.datanucleus.api.jpa.JPAEntityManagerFactory;

PersistenceUnitMetaData pumd = new PersistenceUnitMetaData("dynamic-unit", "RESOURCE_LOCAL", null);
pumd.addClassName("org.datanucleus.test.A");
pumd.setExcludeUnlistedClasses();
pumd.addProperty("javax.persistence.jdbc.url", "jdbc:h2:mem:nucleus");
pumd.addProperty("javax.persistence.jdbc.driver", "org.h2.Driver");
pumd.addProperty("javax.persistence.jdbc.user", "sa");
pumd.addProperty("javax.persistence.jdbc.password", "");
pumd.addProperty("datanucleus.autoCreateSchema", "true");

EntityManagerFactory emf = new JPAEntityManagerFactory(pumd, null);

http://www.datanucleus.org/products/accessplatform_3_2/jpa/persistence_unit.html