DDL 生成と一般的なpersistence.xml設定(OpenJPA)
-
12-12-2019 - |
質問
まとめ
Java Web アプリケーション JPA 2.0 の例を実行しようとしています。の アプリケーション例 で実行するように書かれていました Glassfish
, を使用して EclipseLink
JPAプロバイダーとして。実行できるように変換したいと思います TomEE
と OpenJPA
JPAプロバイダーとして使用していますが、起動して実行するための詳細なチュートリアルはありません OpenJPA
.
問題
変換できなくて困っています persistence.xml
一緒に働く OpenJPA
の代わりに EclipseLink
. 。より具体的には、与えられた persistence.xml
指定していません:
Entity
クラス。これらは必要ですか?- 目的の JPA プロバイダー。コンテナはデフォルトで何かを設定するのでしょうか?
- JDBCドライバー。「メモリ内」DB (初期テスト目的のみ) を指定するにはどうすればよいですか?
また:
- OpenJPA では DDL 生成プロパティはどのように表現されますか?それらを見つけることができませんでした 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 jar を TomEE に追加するだけで 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