Создать фабрику Entity Manager без файла persistence.xml

Есть ли способ создать EntityManagerFactory без определенной единицы персистентности? Можете ли вы дать все необходимые свойства для создания фабрики менеджера сущностей? Мне нужно создать EntityManagerFactory из указанных пользователем значений во время выполнения. Обновление persistence.xml и перекомпиляция не возможны.

В настоящее время я использую динамическое постоянство eclipselink, поэтому мне нужно создать EntityManagerFactory без определения единицы постоянства? У меня есть группы сущностей во время выполнения, которым необходимо сопоставить одну группу сущностей с другой базой данных во время выполнения, и для этой группы сущностей во время выполнения нет записи о единицах персистентности.

Любая идея о том, как это сделать, приветствуется!

2 ответа

Решение

Наилучшим вариантом, скорее всего, является прямой доступ к PersistenceProvider и использование API-контейнера EJB для создания EntityManagerFactory из PersistenceUnitInfo.

PersistenceProvider.createContainerEntityManagerFactory ()

См. http://www.eclipse.org/eclipselink/api/2.5/org/eclipse/persistence/jpa/PersistenceProvider.html

Только что видел в документации 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

Другие вопросы по тегам