Есть ли способ инициализировать EntityManager
без единицы измерения продолжительности?
Вы должны определить по крайней мере одна единица сохранения в дескрипторе persistence.xml
развертывания.
Можете ли вы предоставить все необходимые свойства для создания Entitymanager
?
- Необходимо указать атрибут name. Другие атрибуты и элементы являются необязательными. (Спецификация JPA). Таким образом, это должно быть более или менее ваш минимальный
persistence.xml
файла:
<persistence>
<persistence-unit name="[REQUIRED_PERSISTENCE_UNIT_NAME_GOES_HERE]">
SOME_PROPERTIES
</persistence-unit>
</persistence>
В среде Java EE, в jta-data-source
и non-jta-data-source
элементов используются для указания глобального имени JNDI в ССТ и/или не- Источник данных JTA, который будет использоваться поставщиком сохранения.
Так что, если ваша цель Application Server поддерживает JTA (JBoss, WebSphere, GlassFish), ваш persistence.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>
Если ваша цель Application Server не поддерживает 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, водитель, у rl, свойства пользователя и пароля. Но имя зависит от поставщика 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
.
- Для обеспечения переносимости приложения Java SE, необходимо явно перечислить управляемые классы сохраняемости, которые входят в блок сохранения (спецификации JPA)
I необходимо создать 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);
Привет Я попробовал ваше решение, но столкнуться с проблемами, не могли бы вы проверить мой вопрос: http://stackoverflow.com/ Вопросы/3935394/how-to-externalize-properties-from-jpas-persistence-xml – stacker
@stacker Я проверяю –