Вопрос

Краткое содержание

Я пытаюсь запустить пример веб-приложения 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, который охватывает эти проблемы, это было бы так же хорошо.
Это было полезно?

Решение

Если вы добавите 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top