Генерация DDL и общие настройки persistence.xml (OpenJPA)

Резюме

Я пытаюсь запустить пример веб-приложения Java JPA 2.0. пример приложения был написан для работы в Glassfish с использованием EclipseLink в качестве Провайдер JPA. Я хотел бы преобразовать его для работы в TomEE с OpenJPA в качестве поставщика JPA, но у меня нет подробных руководств по началу работы с OpenJPA.

Проблема

У меня проблемы с преобразованием persistence.xml для работы с OpenJPA вместо EclipseLink. В частности, данный persistence.xml не указывает:

  • Entity классов. Это необходимо?
  • Желаемый провайдер JPA. Будет ли контейнер использовать что-то по умолчанию?
  • Драйвер JDBC. Как указать БД "в памяти" (только для целей первоначального тестирования)?

Также:

Подробности

Ниже 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, который охватывает эти проблемы, было бы так же хорошо

person Alex Averbuch    schedule 20.05.2012    source источник
comment
Вы когда-нибудь читали руководство пользователя OpenJPA?   -  person Rick    schedule 21.05.2012
comment
Если у вас есть конкретная ссылка, это будет круто. Я сейчас прохожу через это: openjpa.apache.org/samples.html   -  person Alex Averbuch    schedule 21.05.2012
comment
Мне не удалось найти никаких свойств persistence.xml для генерации DDL здесь: openjpa.apache.org/builds/2.2.0/apache-openjpa/docs/manual.html   -  person Alex Averbuch    schedule 21.05.2012


Ответы (2)


Если вы добавите свойство openjpa.jdbc.SynchronizeMappings, как показано ниже, OpenJPA автоматически создаст все ваши таблицы, все ваши первичные ключи и все внешние ключи в точном соответствии с вашими объектами.

<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>

В качестве альтернативы вы можете использовать EclipseLink в TomEE, просто добавив jar-файлы EclipseLink в <CATALINA_HOME>/lib/

см. здесь Общие свойства PersistenceProvider

person David Blevins    schedule 21.05.2012
comment
Спасибо. Я загрузил EclipseLink, но не уверен, какие файлы .jar мне нужны. Я нашел следующие файлы jar в EclipseLink / jlib / jpa /: ´eclipselink-jpa-modelgen_2.3.2.v20111125-r10461.jar´, ´javax.persistence_1.0.0.jar´, ´javax.persistence_2.0.3.v201010191057.jar ´. Это единственные файлы, которые мне нужно скопировать в lib /? - person Alex Averbuch; 22.05.2012
comment
Думаю, это новый вопрос, я создам еще один. Спасибо за Ваш ответ - person Alex Averbuch; 22.05.2012
comment
Вы говорите, что создавать таблицу, но я должен знать, как я могу предотвратить попытки openjpa создавать таблицы? Что-то вроде: ‹имя свойства = openjpa.jdbc.SynchronizeMappings value = false /› - person merveotesi; 01.10.2012
comment
Простое удаление свойства openjpa.jdbc.SynchronizeMappings должно сделать это. - person David Blevins; 03.10.2012

Ограничения внешнего ключа

Следующая строка не создает внешние ключи:

<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

person Paul Vargas    schedule 10.07.2014