6 eclipselink-orm.xmlスキーマ・リファレンス
eclipselink-orm.xml
を使用して、JPA構成ファイル(orm.xml
)で定義されたマッピングをオーバーライドし、拡張ORM機能を提供する方法を説明します。注意:
eclipselink-orm.xml
マッピング・ファイルを使用すると、TopLinkの多くの高度な機能が有効になりますが、他のJPA実装に対する永続性ユニットの移植性がなくなる場合があります。
eclipselink-orm.xml
ファイルは、TopLinkのオブジェクト・リレーショナル・マッピング・メタデータを定義します。orm.xml
ファイルと同じ基本構造を持ち、さらに直感的で、構成を必要最小限に抑え、オーバーライドを容易にします。
詳細は、次を参照してください。
-
JPA仕様の12.2項、XMLのオーバーライド・ルールに関する項
-
http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Configuration/JPA/orm.xml
EclipseLinkのスキーマはeclipselink_orm_X_X.xsd
で、X_Xは現在のEclipseLinkのバージョン番号(2.4の場合は2_4
など)になります。すべてのEclipseLinkスキーマは、http://wiki.eclipse.org/EclipseLink/XSDs
から入手できます。
この章の内容は次のとおりです。
オーバーライドおよびマージ
orm.xml
ファイルのマッピングをオーバーライドするには、プロジェクトでMETA-INF/eclipselink-orm.xml
ファイルを定義する必要があります。orm.xml
およびeclipselink-orm.xml
の両方が指定されている場合、eclipselink-orm.xml
の内容は、orm.xml
および永続性ユニットで指定されたその他のJPAマッピング・ファイルをオーバーライドします。複数のORMファイルで仕様が重複している場合、競合したエンティティでなければファイルはマージされます。
注意:
persistence.xml
で定義されるファイルの順序によって処理の順序は定義されません。ファイルは、ルールで決定されたとおりに処理、マージおよびオーバーライドされます。
詳細は、次の各項を参照してください。
オーバーライドおよびマージのルール
Oracle TopLinkには、orm.xml
ファイルで定義される次の要素に対して、特定のオーバーライドおよびマージ・ルールがあります。
永続性ユニット・メタデータ
eclipselink-orm.xml
では、表6-1で定義されているように、persistence-unit-metadata
要素が既存のpersistence-unit-metadata
仕様の値をマージまたはオーバーライドします。
表6-1 永続性ユニット・メタデータのオーバーライドおよびマージ
entity-mappings/persistence-unit-metadata | ルール | 説明 |
---|---|---|
|
フル・オーバーライド |
指定されている場合、永続性ユニットのマッピング・メタデータの完全なセットは、永続性ユニットのXMLマッピング・ファイルに含まれます。 |
|
フル・オーバーライド |
|
|
フル・オーバーライド |
|
|
フル・オーバーライド |
|
|
フル・オーバーライド |
|
|
マージ |
|
エンティティ・マッピング
エンティティ、埋込み可能クラスおよびマップされたスーパークラスは、entity-mappings
セクション内で定義されます。eclipselink-orm.xml
のエンティティ、埋込み可能クラスおよびマップされたスーパークラスは、表6-2で定義されたとおり、永続性ユニットに追加されます。
表6-2 エンティティ・マッピングのオーバーライドおよびマージ
entity-mappings/ | ルール | 説明 |
---|---|---|
|
なし |
|
|
なし |
|
|
なし |
schema要素は、別のマッピング・ファイルの拡張機能ではない |
|
なし |
access要素は、別のマッピング・ファイルの拡張機能ではない |
|
フル・オーバーライド |
|
|
フル・オーバーライド |
|
|
フル・オーバーライド |
|
|
フル・オーバーライド |
|
|
フル・オーバーライド |
|
マップされたスーパークラス
マップされたスーパークラスは、完全に定義するか、別のマッピング・ファイルからマップされたスーパークラスに拡張機能を提供する特定の要素を使用して定義できます。表6-3に、個々のオーバーライドおよびマージ・ルールをリストします。
表6-3 マップされたスーパークラスのオーバーライドおよびマージ
entity-mappings/mapped-superclass | ルール | 説明 |
---|---|---|
|
フル・オーバーライド |
|
|
フル・オーバーライド |
|
|
フル・オーバーライド |
|
|
マージおよびフル・オーバーライド |
注意: エンティティ・リスナーのオーバーライドが完了している必要があります。リスナーのすべてのライフサイクル・メソッドを指定する必要があり、エンティティ・リスナーの個々のライフサイクル・メソッドのマージは許可されません。リスナーのクラス名は、オーバーライドを特定するキーになります。 |
|
フル・オーバーライド |
|
|
フル・オーバーライド |
|
|
フル・オーバーライド |
pre-remove設定が存在する場合、eclipselink-orm.xmlのpre-remove設定は、既存の設定をオーバーライドするか新しいpre-remove設定を作成します。 |
|
フル・オーバーライド |
post-remove設定が存在する場合、eclipselink-orm.xmlのpost-remove設定は、既存の設定をオーバーライドするか新しいpost-remove設定を作成します。 |
|
フル・オーバーライド |
pre-update設定が存在する場合、eclipselink-orm.xmlのpre-update設定は、既存の設定をオーバーライドするか新しいpre-update設定を作成します。 |
|
フル・オーバーライド |
post-update設定が存在する場合、eclipselink-orm.xmlのpost-update設定は、既存の設定をオーバーライドするか新しいpost-update設定を作成します。 |
|
フル・オーバーライド |
post-load設定が存在する場合、eclipselink-orm.xmlのpost-load設定は、既存の設定をオーバーライドするか新しいpost-load設定を作成します。 |
|
マージおよびマッピング・レベル・オーバーライド |
|
|
なし |
|
|
フル・オーバーライド |
access設定が存在する場合、eclipselink-orm.xmlのaccess設定は、既存の設定をオーバーライドするか新しいaccess設定を作成します。デフォルト・クラス設定もオーバーライドします。 |
|
フル・オーバーライド |
metadata-complete設定が存在する場合は、eclipselink-orm.xmlのmetadata-complete設定が適用されます。metadata-complete設定が指定されていない場合は、基本的にオフになっている既存の設定をオーバーライドしません。 |
エンティティのオーバーライドおよびマージ・ルール
エンティティは、完全に定義するか、別のマッピング・ファイルからエンティティに拡張機能を提供する特定の要素を使用して定義できます。次の表に、個々のオーバーライドおよびマージ・ルールをリストします。
表6-4 エンティティのオーバーライドおよびマージ
entity-mappings/entity | ルール | 説明 |
---|---|---|
|
フル・オーバーライド |
tableの定義は、このエンティティの他のtable設定(同じ名前を持つ)をオーバーライドします。個々のtable値をマージすることはできません。 |
|
フル・オーバーライド |
secondary-tableの定義は、このエンティティの別のsecondary-tableの設定(同じ名前を持つ)をオーバーライドします。個々のsecondary-table値をマージすることはできません。 |
|
フル・オーバーライド |
primary-key-join-columnの定義は、このエンティティの他のprimary-key-join-column設定をオーバーライドします。個々のprimary-key-join-columnをマージすることはできません。仕様は完了済と想定され、これらのprimary-key-join-columnは真のソースになります。 |
|
フル・オーバーライド |
id-class設定が存在する場合、eclipselink-orm.xmlのid-class設定は、既存の設定をオーバーライドするか新しいid-classを作成します。 |
|
フル・オーバーライド |
inheritance設定が存在する場合、eclipselink-orm.xmlのinheritance設定は、既存の設定をオーバーライドするか新しいinheritance設定を作成します。 |
|
フル・オーバーライド |
discriminator-value設定が存在する場合、eclipselink-orm.xmlのdiscriminator-value設定は、既存の設定をオーバーライドするか新しいdiscriminator-value設定を作成します。 |
|
フル・オーバーライド |
discriminator-column設定が存在する場合、eclipselink-orm.xmlのdiscriminator-column設定は、既存の設定をオーバーライドするか新しいdiscriminator-column設定を作成します。 |
|
フル・オーバーライド |
sequence-generatorは、名前によって一意です。eclipselink-orm.xmlで定義されたsequence-generatorは、他のマッピング・ファイルで定義された同じ名前のsequence-generatorをオーバーライドします。オーバーライドする以外では、同じ名前を持つ複数のsequence-generatorが1つまたは複数のマッピング・ファイル間で定義されると、例外がスローされます。 |
|
フル・オーバーライド |
table-generatorは、名前によって一意です。eclipselink-orm.xmlで定義されたtable-generatorは、他のマッピング・ファイルで定義された同じ名前のtable-generatorをオーバーライドします。オーバーライドする以外では、同じ名前を持つ複数のtable-generatorが1つまたは複数のマッピング・ファイル間で定義されると、例外がスローされます。 |
|
マージおよびフル・オーバーライド |
named-queryは、名前によって一意です。eclipselink-orm.xmlで定義されたnamed-queryは、他のマッピング・ファイルで定義された同じ名前のnamed-queryをオーバーライドします。オーバーライドする以外では、同じ名前を持つ複数の |
|
マージおよびフル・オーバーライド |
named-native-queryは、名前によって一意です。eclipselink-orm.xmlで定義されたnamed-native-queryは、他のマッピング・ファイルで定義された同じ名前のnamed-native-queryをオーバーライドします。オーバーライドする以外では、同じ名前を持つ複数のnamed-native-queryが1つまたは複数のマッピング・ファイル間で定義されると、例外がスローされます。 |
|
マージおよびフル・オーバーライド |
sql-result-set-mappingは、名前によって一意です。eclipselink-orm.xmlで定義されたsql-result-set-mappingは、他のマッピング・ファイルで定義された同じ名前のsql-result-set-mappingをオーバーライドします。オーバーライドする以外では、同じ名前を持つ複数のsql-result-set-mappingが1つまたは複数のマッピング・ファイル間で定義されると、例外がスローされます。 |
|
フル・オーバーライド |
exclude-default-listeners設定が存在する場合は、eclipselink-orm.xmlのexclude-default-listeners設定が適用されます。exclude-default-listeners設定が指定されていない場合は、基本的にオフになっている既存の設定をオーバーライドしません。 |
|
フル・オーバーライド |
exclude-superclass-listeners設定が存在する場合は、eclipselink-orm.xmlのexclude-superclass-listeners設定が適用されます。exclude-superclass-listeners設定が指定されていない場合は、基本的にオフになっている既存の設定をオーバーライドしません。 |
|
フル・オーバーライド |
entity-listeners設定が存在する場合、eclipselink-orm.xmlのentity-listeners設定は、既存の設定をオーバーライドおよびマージするか、新しいentity-listeners設定をまとめて作成します。 注意: エンティティ・リスナーのオーバーライドが完了している必要があります。リスナーのすべてのライフサイクル・メソッドを指定する必要があり、エンティティ・リスナーの個々のライフサイクル・メソッドのマージは許可されません。リスナーのクラス名は、オーバーライドを特定するキーになります。 |
|
フル・オーバーライド |
pre-persist設定が存在する場合、eclipselink-orm.xmlのpre-persist設定は、既存の設定をオーバーライドするか新しいpre-persist設定を作成します。 |
|
フル・オーバーライド |
post-persist設定が存在する場合、eclipselink-orm.xmlのpost-persist設定は、既存の設定をオーバーライドするか新しいpost-persist設定を作成します。 |
|
フル・オーバーライド |
pre-remove設定が存在する場合、eclipselink-orm.xmlのpre-remove設定は、既存の設定をオーバーライドするか新しいpre-remove設定を作成します。 |
|
フル・オーバーライド |
post-remove設定が存在する場合、eclipselink-orm.xmlのpost-remove設定は、既存の設定をオーバーライドするか新しいpost-remove設定を作成します。 |
|
フル・オーバーライド |
pre-update設定が存在する場合、eclipselink-orm.xmlのpre-update設定は、既存の設定をオーバーライドするか新しいpre-update設定を作成します。 |
|
フル・オーバーライド |
post-update設定が存在する場合、eclipselink-orm.xmlのpost-update設定は、既存の設定をオーバーライドするか新しいpost-update設定を作成します。 |
|
フル・オーバーライド |
post-load設定が存在する場合、eclipselink-orm.xmlのpost-load設定は、既存の設定をオーバーライドするか新しいpost-load設定を作成します。 |
|
マージおよびマッピング・レベル・オーバーライド |
attribute設定(id、embedded-id、basic、version、many-to-one、one-to-many、one-to-oneなど)がマッピング・レベルで存在する場合、eclipselink-orm.xmlのattributeは既存の設定をマージまたはオーバーライドするか、新しいattributeを作成します。 |
|
マージおよびマッピング・レベル・オーバーライド |
association-override設定が存在する場合、eclipselink-orm.xmlのassociation-override設定は、既存の設定をオーバーライドするか新しいassociation-override設定を作成します。 |
|
フル・オーバーライド |
name設定が存在する場合、eclipselink-orm.xmlのname設定は、既存の設定をオーバーライドするか新しいname設定を作成します。 |
|
なし |
|
|
フル・オーバーライド |
access設定が存在する場合、eclipselink-orm.xmlのaccess設定は、既存の設定をオーバーライドするか新しいaccess設定を作成します。デフォルト・クラス設定もオーバーライドします。 |
|
フル・オーバーライド |
metadata-complete設定が存在する場合は、eclipselink-orm.xmlのmetadata-complete設定が適用されます。metadata-complete設定が指定されていない場合は、基本的にオフになっている既存の設定をオーバーライドしません。 |
埋込み可能クラス
埋込み可能クラスは、完全に定義するか、別のマッピング・ファイルから埋込み可能クラスに拡張機能を提供するように定義できます。そのため、そのクラスのメタデータをマージできます。表6-4に、個々の埋込み可能クラスのオーバーライド・ルールをリストします。
表6-5 埋込み可能クラスのオーバーライドおよびマージ
entity-mappings/embeddable | ルール | 説明 |
---|---|---|
|
オーバーライドおよびマージ |
attribute設定(id、embedded-id、basic、version、many-to-one、one-to-many、one-to-one、many-to-many、embedded、transient)がマッピング・レベルで存在する場合、eclipselink-orm.xmlのattributeは既存の設定をマージまたはオーバーライドするか、新しいattributeを作成します。 |
|
なし |
|
|
フル・オーバーライド |
access設定が存在する場合、eclipselink-orm.xmlのaccess設定は、既存の設定をオーバーライドするか新しいaccess設定を作成します。デフォルト・クラス設定もオーバーライドします。 |
|
フル・オーバーライド |
metadata-complete設定が存在する場合は、eclipselink-orm.xmlのmetadata-complete設定が適用されます。metadata-complete設定が指定されていない場合は、基本的にオフになっている既存の設定をオーバーライドしません。 |
オーバーライドおよびマージの例
例6-1 オーバーライド/マージの例1
この例では、Oracle TopLinkプロジェクトに次が含まれます。
-
META-INF/orm.xml
: マッピングbおよびcでエンティティAを定義します。 -
META-INF/eclipselink-orm.xml
: マッピングcおよびdでエンティティAを定義します。
結果:
-
エンティティAには次が含まれます:
-
マッピングb (
orm.xml
から) -
マッピングcおよびd (
eclipselink-orm.xml
から)
-
例6-2 オーバーライド/マージの例2
この例では、Oracle TopLinkプロジェクトに次が含まれます。
-
META-INF/orm.xml
: マッピングbおよびcでエンティティAを定義します -
META-INF/some-other-mapping-file.xml
: マッピングaおよびbでエンティティBを定義します -
META-INF/eclipselink-orm.xml
: マッピングcおよびdでエンティティAを定義し、マッピングbおよびcでエンティティBを定義します
結果:
-
エンティティAには次が含まれます:
-
マッピングb (
orm.xml
から) -
マッピングcおよびd (
eclipselink-orm.xml
から)
-
-
エンティティBには次が含まれます:
-
マッピングa (
some-other-mapping-file
から) -
マッピングbおよびc (
eclipselink-orm.xml
から)
-
例6-3 オーバーライド/マージの例3
この例では、Oracle TopLinkプロジェクトに次が含まれます。
-
META-INF/orm.xml
: マッピングbおよびcでエンティティAを定義します。 -
META-INF/eclipselink-orm.xml
: マッピングcおよびdでエンティティAを定義します。 -
META-INF/some-other-mapping-file.xml
: マッピングxでエンティティAを定義します。
結果:
-
エンティティAには次が含まれます:
-
マッピングb (
orm.xml
から) -
マッピングcおよびd (
eclipselink-orm.xml
から) -
マッピングx (
some-other-mapping-file.xml
から)
-
例6-4 オーバーライド/マージの例4
この例では、Oracle TopLinkプロジェクトに次が含まれます。
-
META-INF/orm.xml
: マッピングbおよびcでエンティティAを定義します。 -
META-INF/extensions/eclipselink-orm.xml
: マッピングcおよびdでエンティティAを定義します。注意: ファイルは、
persistence.xml
ファイルの<mapping-file>
タグによって追加されます。
マッピングcの仕様の競合により、例外になります。
例6-5 オーバーライド/マージの例5
この例では、Oracle TopLinkプロジェクトに次が含まれます。
-
META-INF/orm.xml
: マッピングbおよびcでエンティティAを定義します -
META-INF/jpa-mapping-file.xml
: マッピングaおよびdでエンティティAを定義します。 -
META-INF/extensions/eclipse-mapping-file.xml
: マッピングcおよびdでエンティティAを定義します。
マッピングcまたはd(どちらか最初に処理される方)の仕様の競合により、例外になります。