Генерация DDL и общие настройки persistence.xml (OpenJPA)
-
12-12-2019 - |
Вопрос
Краткое содержание
Я пытаюсь запустить пример веб-приложения Java JPA 2.0.А пример приложения было написано для запуска Glassfish
, с использованием EclipseLink
в качестве поставщика JPA.Я хотел бы преобразовать его для запуска TomEE
с OpenJPA
как поставщик JPA, но я не могу предоставить подробные руководства по началу работы с OpenJPA
.
Проблема
У меня проблемы с конвертацией persistence.xml
работать с OpenJPA
вместо EclipseLink
.Точнее, данное persistence.xml
не указывает:
Entity
занятия.Это необходимо?- Желаемый поставщик JPA.Будет ли контейнер использовать что-то по умолчанию?
- Драйвер JDBC.Как указать БД «в памяти» (только для целей первоначального тестирования)?
Также:
- Как свойства генерации DDL выражаются в OpenJPA?Я не смог найти их Руководство пользователя OpenJPA.
Подробности
Ниже приведена ссылка EclipseLink persistence.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="order" transaction-type="JTA">
<jta-data-source>jdbc/__default</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
<property name="eclipselink.ddl-generation.output-mode"
value="both" />
</properties>
</persistence-unit>
</persistence>
У меня есть следующее Entity
классы:
order.entity.LineItem
order.entity.LineItemKey
order.entity.Order
order.entity.Part
order.entity.PartKey
order.entity.Vendor
order.entity.VendorPart
Вопрос
- Кто-нибудь знает, как будет выглядеть эквивалент persistence.xml для OpenJPA?
- В качестве альтернативы, если бы кто-нибудь мог указать мне на учебник OpenJPA, который охватывает эти проблемы, это было бы так же хорошо.
Решение
Если вы добавите openjpa.jdbc.SynchronizeMappings
свойство, как показано ниже. OpenJPA автоматически создаст все ваши таблицы, все ваши первичные ключи и все внешние ключи в точном соответствии с вашими объектами.
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
Альтернативно вы можете использовать EclipseLink в TomEE, просто добавив jar-файлы EclipseLink в <CATALINA_HOME>/lib/
обратитесь сюда за Общие свойства PersistenceProvider
Другие советы
Ограничения внешнего ключа
Следующая строка не создает внешние ключи:
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(ForeignKeys=true)"/>
Только создает схему и удаляет содержимое базы данных.
Но если вы хотите создать внешние ключи, используйте следующие строки:
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(foreignKeys=true,schemaAction='dropDB,add')"/>
<property name="openjpa.jdbc.SchemaFactory"
value="native(foreignKeys=true)" />
<property name="openjpa.jdbc.MappingDefaults"
value="ForeignKeyDeleteAction=restrict, JoinForeignKeyDeleteAction=restrict"/>
Посмотреть сгенерированный SQL
Другими словами, если вы хотите увидеть вывод SQL:
<property name="openjpa.Log"
value="DefaultLevel=TRACE,SQL=TRACE" />
ПРИМЕЧАНИЕ:Чтобы увидеть сгенерированный вывод в консоли TomEE, вам необходимо изменить уровень журнала в файле. loggin.properties
с openjpa.level = FINEST
Смотрите больше в http://openjpa.apache.org/faq.html