Есть ли способ инициализировать EntityManager
без определенной единицы персистентности? Можно ли дать все необходимые свойства для создания менеджера по объекту? Я должен создать EntityManager
от заданных значений пользователя во времени выполнения. Обновление persistence.xml
и перекомпиляция не является опцией.
Любая идея о том, как сделать это, больше, чем одобрена!
Есть ли способ инициализировать
Entitymanager
без определенного блока настойчивости?
Вы должны определить , по меньшей мере, один блок настойчивости в Persistence.xml
Дескриптор развертывания.
Можете ли вы дать все необходимые свойства для создания EntityManager
?
файлом Persistence.xml
: <persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
SOME_PROPERTIES
</persistence-unit>
</persistence>
в средах Java EE, jta-data
jta-data-data
ине-jta-data- Источник
элементы используются для уточнения Global JNDI Имя источника данных JTA и / или NO-JTA , который будет использоваться поставщиком постоянства.
Итак, если ваш целевой сервер приложений поддерживает JTA (JBOSS, WebSphere, Glassfish), ваш Spinistence.xml
выглядит как:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
<!--GLOBAL_JNDI_GOES_HERE-->
<jta-data-source>jdbc/myDS</jta-data-source>
</persistence-unit>
</persistence>
Если ваш целевой сервер приложений не поддерживает JTA (Tomcat), ваш Persistence.xml
выглядит как:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
<!--GLOBAL_JNDI_GOES_HERE-->
<non-jta-data-source>jdbc/myDS</non-jta-data-source>
</persistence-unit>
</persistence>
Если ваш источник данных не связан с глобальным JNDI (например, за пределами контейнера Java EE), поэтому вы обычно определяете провайдеру JPA, драйвер, URL, пользователь и Свойства пароля. Но Имя свойства зависит от провайдера JPA. Итак, для Hibernate как провайдер JPA, ваш Persistence.xml
файл будет выглядеть:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>br.com.persistence.SomeClass</class>
<properties>
<property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="hibernate.connection.url" value="jdbc:derby://localhost:1527/EmpServDB;create=true"/>
<property name="hibernate.connection.username" value="APP"/>
<property name="hibernate.connection.password" value="APP"/>
</properties>
</persistence-unit>
</persistence>
атрибут транзакции типа
в целом в средах Java EE, тип транзакции
Resource_local
Предполагается, что будет предоставлена информация о данных не JTA. В среде Java EE, если этот элемент не указан, по умолчанию JTA по умолчанию. В среде Java SE, если этот элемент не указан, может быть принято значение по умолчаниюResource_Local
.
Мне нужно создать
EntityManager
от указанных значений пользователя во время выполнения
Так что используйте это:
Map addedOrOverridenProperties = new HashMap();
// Let's suppose we are using Hibernate as JPA provider
addedOrOverridenProperties.put("hibernate.show_sql", true);
Persistence.createEntityManagerFactory(<PERSISTENCE_UNIT_NAME_GOES_HERE>, addedOrOverridenProperties);