プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス
12c (12.2.1.2.0)
E82670-01
  目次へ移動
目次

前
 
 

6 eclipselink-orm.xmlスキーマ・リファレンス

この章では、EclipseLinkのネイティブ・メタデータXMLファイルのeclipselink-orm.xmlを使用して、JPA構成ファイル(orm.xml)で定義されたマッピングをオーバーライドし、拡張ORM機能を提供する方法を説明します。


注意:

eclipselink-orm.xmlマッピング・ファイルを使用すると、EclipseLinkの多くの高度な機能が有効になりますが、他のJPA実装に対する永続性ユニットの移植性がなくなる場合があります。

eclipselink-orm.xmlファイルは、EclipseLinkのオブジェクト・リレーショナル・マッピング・メタデータを定義します。orm.xmlファイルと同じ基本構造を持ち、さらに直感的で、構成を必要最小限に抑え、オーバーライドを容易にします。

詳細は、次を参照してください。

EclipseLinkのスキーマはeclipselink_orm_X_X.xsdで、X_Xは現在のEclipseLinkのバージョン番号(2.4の場合は2_4など)になります。すべてのEclipseLinkスキーマは、http://wiki.eclipse.org/EclipseLink/XSDsから入手できます。

この章の内容は次のとおりです。

6.1 オーバーライドおよびマージ

orm.xmlファイルのマッピングをオーバーライドするには、プロジェクトでMETA-INF/eclipselink-orm.xmlファイルを定義する必要があります。orm.xmlおよびeclipselink-orm.xmlの両方が指定されている場合、eclipselink-orm.xmlの内容は、orm.xmlおよび永続性ユニットで指定されたその他のJPAマッピング・ファイルをオーバーライドします。複数のORMファイルで仕様が重複している場合、競合したエンティティでなければファイルはマージされます。


注意:

persistence.xmlで定義されるファイルの順序によって処理の順序は定義されません。ファイルは、ルールで決定されたとおりに処理、マージおよびオーバーライドされます。

詳細は、次の各項を参照してください。

6.1.1 オーバーライドおよびマージのルール

EclipseLinkには、orm.xmlファイルで定義される次の要素に対して、特定のオーバーライドおよびマージ・ルールがあります。

6.1.1.1 永続性ユニット・メタデータ

eclipselink-orm.xmlでは、表6-1で定義されているように、persistence-unit-metadata要素が既存のpersistence-unit-metadata仕様の値をマージまたはオーバーライドします。

表6-1 永続性ユニット・メタデータのオーバーライドおよびマージ

entity-mappings/persistence-unit-metadata ルール 説明

xml-mapping-metadata- complete

フル・オーバーライド

指定されている場合、永続性ユニットのマッピング・メタデータの完全なセットは、永続性ユニットのXMLマッピング・ファイルに含まれます。

persistence-unit-defaults/ schema

フル・オーバーライド

schema設定が存在する場合、eclipselink-orm.xml schema設定は、既存の設定をオーバーライドするか新しいschema設定を作成します。

persistence-unit-defaults/ catalog

フル・オーバーライド

catalog設定が存在する場合、eclipselink-orm.xml catalog設定は、既存の設定をオーバーライドするか新しいcatalog設定を作成します。

persistence-unit-defaults/ access

フル・オーバーライド

access設定が存在する場合、eclipselink-orm.xml access設定は、既存の設定をオーバーライドするか新しいaccess設定を作成します。

entity-mappings/persistence-unit-metadata/persistence-unit-defaults/cascade-persist

フル・オーバーライド

cascade-persist設定が存在する場合、eclipselink-orm.xml cascade-persist設定は、既存の設定をオーバーライドするか新しいcascade-persist設定を作成します。

entity-mappings/persistence-unit-metadata/persistence-unit-defaults/entity-listeners

マージ

entity-listenersが存在する場合、eclipselink-orm.xml entity-listenersは、永続性ユニットのすべてのentity-listenersのリストとマージされます。


6.1.1.2 エンティティ・マッピング

エンティティ、埋込み可能クラスおよびマップされたスーパークラスは、entity-mappingsセクション内で定義されます。eclipselink-orm.xmlのエンティティ、埋込み可能クラスおよびマップされたスーパークラスは、表6-2で定義されたとおり、永続性ユニットに追加されます。

表6-2 エンティティ・マッピングのオーバーライドおよびマージ

entity-mappings/ ルール 説明

package

なし

package要素は、同じマッピング・ファイルのサブ要素と属性内にリストされたクラスのパッケージのみを指定します。eclipselink-orm.xmlファイル内で完全に定義されたエンティティにのみ適用され、それ以外の使用は、ローカルのままでJPA仕様の説明と同じになります。

catalog

なし

catalog要素は、別のマッピング・ファイルの拡張機能ではないeclipselink-orm.xmlファイル内にリストされたサブ要素と属性にのみ適用されます。それ以外の場合、eclipselink-orm.xmlファイル内のカタログ要素の使用は、ローカルのままでJPA仕様の説明と同じになります。

schema

なし

schema要素は、別のマッピング・ファイルの拡張機能ではないeclipselink-orm.xmlファイル内にリストされたサブ要素と属性にのみ適用されます。それ以外の場合、eclipselink-orm.xmlファイル内のschema要素の使用は、ローカルのままでJPA仕様の説明と同じになります。

access

なし

access要素は、別のマッピング・ファイルの拡張機能ではないeclipselink-orm.xmlファイル内にリストされたサブ要素と属性にのみ適用されます。それ以外の場合、eclipselink-orm.xmlファイル内のaccess要素の使用は、ローカルのままでJPA仕様の説明と同じになります。

sequence-generator

フル・オーバーライド

sequence-generatorは、名前によって一意です。eclipselink-orm.xmlで定義されたsequence-generatorは、別のマッピング・ファイルで定義された同じ名前のsequence-generatorをオーバーライドします。オーバーライドする以外では、同じ名前を持つ複数のsequence-generatorsが1つまたは複数のマッピング・ファイル間で定義されると、例外がスローされます。

table-generator

フル・オーバーライド

table-generatorは、名前によって一意です。eclipselink-orm.xmlで定義されたtable-generatorは、別のマッピング・ファイルで定義された同じ名前のtable-generatorをオーバーライドします。オーバーライドする以外では、同じ名前を持つ複数のtable-generatorsが1つまたは複数のマッピング・ファイル間で定義されると、例外がスローされます。

named-query

フル・オーバーライド

named-queryは、名前によって一意です。eclipselink-orm.xmlで定義されたnamed-queryは、他のマッピング・ファイルで定義された同じ名前のnamed-queryをオーバーライドします。オーバーライドする以外では、同じ名前を持つ複数のnamed-querysが1つまたは複数のマッピング・ファイル間で定義されると、例外がスローされます。

named-native-query

フル・オーバーライド

named-native-queryは、名前によって一意です。eclipselink-orm.xmlで定義されたnamed-native-queryは、他のマッピング・ファイルで定義された同じ名前のnamed-native-queryをオーバーライドします。オーバーライドする以外では、同じ名前を持つ複数のnamed-native-querysが1つまたは複数のマッピング・ファイル間で定義されると、例外がスローされます。

sql-result-set-mapping

フル・オーバーライド

sql-result-set-mappingは、名前によって一意です。eclipselink-orm.xmlで定義されたsql-result-set-mappingは、他のマッピング・ファイルで定義された同じ名前のsql-result-set-mappingをオーバーライドします。オーバーライドする以外では、同じ名前を持つ複数のsql-result-set-mappingが1つまたは複数のマッピング・ファイル間で定義されると、例外がスローされます。


6.1.1.3 マップされたスーパークラス

マップされたスーパークラスは、完全に定義するか、別のマッピング・ファイルからマップされたスーパークラスに拡張機能を提供する特定の要素を使用して定義できます。表6-3に、個々のオーバーライドおよびマージ・ルールをリストします。

表6-3 マップされたスーパークラスのオーバーライドおよびマージ

entity-mappings/mapped-superclass ルール 説明

id-class

フル・オーバーライド

id-classが存在する場合、eclipselink-orm.xmlid-class設定は、既存の設定をオーバーライドするか新しいid-class設定を作成します。

exclude-default- listeners

フル・オーバーライド

exclude-default-listenersが存在する場合は、eclipselink-orm.xmlexclude-default-listeners設定が適用されます。exclude-default-listeners設定が指定されていない場合は、基本的にオフになっている既存の設定をオーバーライドしません。

exclude-superclass- listeners

フル・オーバーライド

exclude-superclass-listenersが存在する場合は、eclipselink-orm.xmlexclude-superclass-listeners設定が適用されます。exclude-superclass-listeners設定が指定されていない場合は、基本的にオフになっている既存の設定をオーバーライドしません。

entity-listeners

マージおよびフル・オーバーライド

entity-listeners設定が存在する場合、eclipselink-orm.xmlentity-listeners設定は、既存の設定をオーバーライドおよびマージするか、新しいentity-listeners設定をまとめて作成します。

注意: エンティティ・リスナーのオーバーライドが完了している必要があります。リスナーのすべてのライフサイクル・メソッドを指定する必要があり、エンティティ・リスナーの個々のライフサイクル・メソッドのマージは許可されません。リスナーのクラス名は、オーバーライドを特定するキーになります。

pre-persist

フル・オーバーライド

pre-persist設定が存在する場合、eclipselink-orm.xmlpre-persist設定は、既存の設定をオーバーライドするか新しいpre-persist設定を作成します。

post-persist

フル・オーバーライド

post-persist設定が存在する場合、eclipselink-orm.xmlpost-persist設定は、既存の設定をオーバーライドするか新しいpost-persist設定を作成します。

pre-remove

フル・オーバーライド

pre-remove設定が存在する場合、eclipselink-orm.xmlのpre-remove設定は、既存の設定をオーバーライドするか新しいpre-remove設定を作成します。

post-remove

フル・オーバーライド

post-remove設定が存在する場合、eclipselink-orm.xmlのpost-remove設定は、既存の設定をオーバーライドするか新しいpost-remove設定を作成します。

pre-update

フル・オーバーライド

pre-update設定が存在する場合、eclipselink-orm.xmlのpre-update設定は、既存の設定をオーバーライドするか新しいpre-update設定を作成します。

post-update

フル・オーバーライド

post-update設定が存在する場合、eclipselink-orm.xmlのpost-update設定は、既存の設定をオーバーライドするか新しいpost-update設定を作成します。

post-load

フル・オーバーライド

post-load設定が存在する場合、eclipselink-orm.xmlのpost-load設定は、既存の設定をオーバーライドするか新しいpost-load設定を作成します。

attributes

マージおよびマッピング・レベル・オーバーライド

attribute設定(idembedded-idbasicversionmany-to-oneone-to-manyone-to-oneなど)がマッピング・レベルで存在する場合、eclipselink-orm.xmlのattributeは既存の設定をマージまたはオーバーライドするか、新しいattributeを作成します。

class

なし


access

フル・オーバーライド

access設定が存在する場合、eclipselink-orm.xmlのaccess設定は、既存の設定をオーバーライドするか新しいaccess設定を作成します。デフォルト・クラス設定もオーバーライドします。

metadata-complete

フル・オーバーライド

metadata-complete設定が存在する場合は、eclipselink-orm.xmlのmetadata-complete設定が適用されます。metadata-complete設定が指定されていない場合は、基本的にオフになっている既存の設定をオーバーライドしません。


6.1.1.4 エンティティのオーバーライドおよびマージ・ルール

エンティティは、完全に定義するか、別のマッピング・ファイルからエンティティに拡張機能を提供する特定の要素を使用して定義できます。次の表に、個々のオーバーライドおよびマージ・ルールをリストします。

表6-4 エンティティのオーバーライドおよびマージ

entity-mappings/entity ルール 説明

table

フル・オーバーライド

tableの定義は、このエンティティの他のtable設定(同じ名前を持つ)をオーバーライドします。個々のtable値をマージすることはできません。

secondary-table

フル・オーバーライド

secondary-tableの定義は、このエンティティの別のsecondary-tableの設定(同じ名前を持つ)をオーバーライドします。個々のsecondary-table値をマージすることはできません。

primary-key-join-column

フル・オーバーライド

primary-key-join-columnの定義は、このエンティティの他のprimary-key-join-column設定をオーバーライドします。個々のprimary-key-join-columnをマージすることはできません。仕様は完了済と想定され、これらのprimary-key-join-columnは真のソースになります。

id-class

フル・オーバーライド

id-class設定が存在する場合、eclipselink-orm.xmlのid-class設定は、既存の設定をオーバーライドするか新しいid-classを作成します。

inheritance

フル・オーバーライド

inheritance設定が存在する場合、eclipselink-orm.xmlのinheritance設定は、既存の設定をオーバーライドするか新しいinheritance設定を作成します。

discriminator-value

フル・オーバーライド

discriminator-value設定が存在する場合、eclipselink-orm.xmlのdiscriminator-value設定は、既存の設定をオーバーライドするか新しいdiscriminator-value設定を作成します。

discriminator-column

フル・オーバーライド

discriminator-column設定が存在する場合、eclipselink-orm.xmlのdiscriminator-column設定は、既存の設定をオーバーライドするか新しいdiscriminator-column設定を作成します。

sequence-generator

フル・オーバーライド

sequence-generatorは、名前によって一意です。eclipselink-orm.xmlで定義されたsequence-generatorは、他のマッピング・ファイルで定義された同じ名前のsequence-generatorをオーバーライドします。オーバーライドする以外では、同じ名前を持つ複数のsequence-generatorが1つまたは複数のマッピング・ファイル間で定義されると、例外がスローされます。

table-generator

フル・オーバーライド

table-generatorは、名前によって一意です。eclipselink-orm.xmlで定義されたtable-generatorは、他のマッピング・ファイルで定義された同じ名前のtable-generatorをオーバーライドします。オーバーライドする以外では、同じ名前を持つ複数のtable-generatorが1つまたは複数のマッピング・ファイル間で定義されると、例外がスローされます。

named-query

マージおよびフル・オーバーライド

named-queryは、名前によって一意です。eclipselink-orm.xmlで定義されたnamed-queryは、他のマッピング・ファイルで定義された同じ名前のnamed-queryをオーバーライドします。オーバーライドする以外では、同じ名前を持つ複数のnamed-queryが1つまたは複数のマッピング・ファイル間で定義されると、例外がスローされます。

named-native-query

マージおよびフル・オーバーライド

named-native-queryは、名前によって一意です。eclipselink-orm.xmlで定義されたnamed-native-queryは、他のマッピング・ファイルで定義された同じ名前のnamed-native-queryをオーバーライドします。オーバーライドする以外では、同じ名前を持つ複数のnamed-native-queryが1つまたは複数のマッピング・ファイル間で定義されると、例外がスローされます。

sql-result-set-mapping

マージおよびフル・オーバーライド

sql-result-set-mappingは、名前によって一意です。eclipselink-orm.xmlで定義されたsql-result-set-mappingは、他のマッピング・ファイルで定義された同じ名前のsql-result-set-mappingをオーバーライドします。オーバーライドする以外では、同じ名前を持つ複数のsql-result-set-mappingが1つまたは複数のマッピング・ファイル間で定義されると、例外がスローされます。

exclude-default-listeners

フル・オーバーライド

exclude-default-listeners設定が存在する場合は、eclipselink-orm.xmlのexclude-default-listeners設定が適用されます。exclude-default-listeners設定が指定されていない場合は、基本的にオフになっている既存の設定をオーバーライドしません。

exclude-superclass-listeners

フル・オーバーライド

exclude-superclass-listeners設定が存在する場合は、eclipselink-orm.xmlのexclude-superclass-listeners設定が適用されます。exclude-superclass-listeners設定が指定されていない場合は、基本的にオフになっている既存の設定をオーバーライドしません。

entity-listeners

フル・オーバーライド

entity-listeners設定が存在する場合、eclipselink-orm.xmlのentity-listeners設定は、既存の設定をオーバーライドおよびマージするか、新しいentity-listeners設定をまとめて作成します。

注意: エンティティ・リスナーのオーバーライドが完了している必要があります。リスナーのすべてのライフサイクル・メソッドを指定する必要があり、エンティティ・リスナーの個々のライフサイクル・メソッドのマージは許可されません。リスナーのクラス名は、オーバーライドを特定するキーになります。

pre-persist

フル・オーバーライド

pre-persist設定が存在する場合、eclipselink-orm.xmlのpre-persist設定は、既存の設定をオーバーライドするか新しいpre-persist設定を作成します。

post-persist

フル・オーバーライド

post-persist設定が存在する場合、eclipselink-orm.xmlのpost-persist設定は、既存の設定をオーバーライドするか新しいpost-persist設定を作成します。

pre-remove

フル・オーバーライド

pre-remove設定が存在する場合、eclipselink-orm.xmlのpre-remove設定は、既存の設定をオーバーライドするか新しいpre-remove設定を作成します。

post-remove

フル・オーバーライド

post-remove設定が存在する場合、eclipselink-orm.xmlのpost-remove設定は、既存の設定をオーバーライドするか新しいpost-remove設定を作成します。

pre-update

フル・オーバーライド

pre-update設定が存在する場合、eclipselink-orm.xmlのpre-update設定は、既存の設定をオーバーライドするか新しいpre-update設定を作成します。

post-update

フル・オーバーライド

post-update設定が存在する場合、eclipselink-orm.xmlのpost-update設定は、既存の設定をオーバーライドするか新しいpost-update設定を作成します。

post-load

フル・オーバーライド

post-load設定が存在する場合、eclipselink-orm.xmlのpost-load設定は、既存の設定をオーバーライドするか新しいpost-load設定を作成します。

attributes

マージおよびマッピング・レベル・オーバーライド

attribute設定(id、embedded-id、basic、version、many-to-one、one-to-many、one-to-oneなど)がマッピング・レベルで存在する場合、eclipselink-orm.xmlのattributeは既存の設定をマージまたはオーバーライドするか、新しいattributeを作成します。

association-override

マージおよびマッピング・レベル・オーバーライド

association-override設定が存在する場合、eclipselink-orm.xmlのassociation-override設定は、既存の設定をオーバーライドするか新しいassociation-override設定を作成します。

name

フル・オーバーライド

name設定が存在する場合、eclipselink-orm.xmlのname設定は、既存の設定をオーバーライドするか新しいname設定を作成します。

class

なし


access

フル・オーバーライド

access設定が存在する場合、eclipselink-orm.xmlのaccess設定は、既存の設定をオーバーライドするか新しいaccess設定を作成します。デフォルト・クラス設定もオーバーライドします。

metadata-complete

フル・オーバーライド

metadata-complete設定が存在する場合は、eclipselink-orm.xmlのmetadata-complete設定が適用されます。metadata-complete設定が指定されていない場合は、基本的にオフになっている既存の設定をオーバーライドしません。


6.1.1.5 埋込み可能クラス

埋込み可能クラスは、完全に定義するか、別のマッピング・ファイルから埋込み可能クラスに拡張機能を提供するように定義できます。そのため、そのクラスのメタデータをマージできます。表6-4に、個々の埋込み可能クラスのオーバーライド・ルールをリストします。

表6-5 埋込み可能クラスのオーバーライドおよびマージ

entity-mappings/embeddable ルール 説明

attributes

オーバーライドおよびマージ

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を作成します。

class

なし


access

フル・オーバーライド

access設定が存在する場合、eclipselink-orm.xmlのaccess設定は、既存の設定をオーバーライドするか新しいaccess設定を作成します。デフォルト・クラス設定もオーバーライドします。

metadata-complete

フル・オーバーライド

metadata-complete設定が存在する場合は、eclipselink-orm.xmlのmetadata-complete設定が適用されます。metadata-complete設定が指定されていない場合は、基本的にオフになっている既存の設定をオーバーライドしません。


6.1.2 オーバーライドおよびマージの例

例6-1 オーバーライド/マージの例1

この例では、EclipseLinkプロジェクトに次が含まれます。

  • 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

この例では、EclipseLinkプロジェクトに次が含まれます。

  • 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

この例では、EclipseLinkプロジェクトに次が含まれます。

  • 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

この例では、EclipseLinkプロジェクトに次が含まれます。

  • META-INF/orm.xml: マッピングbおよびcでエンティティAを定義します。

  • META-INF/extensions/eclipselink-orm.xml: マッピングcおよびdでエンティティAを定義します。

    注意: ファイルは、persistence.xmlファイルの<mapping-file>タグによって追加されます。

マッピングcの仕様の競合により、例外になります。

例6-5 オーバーライド/マージの例5

この例では、EclipseLinkプロジェクトに次が含まれます。

  • 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(どちらか最初に処理される方)の仕様の競合により、例外になります。