Oracle® Fusion Middleware

Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス

12c (12.2.1.2.0)

E82670-01(原本部品番号:E79114-01)

2016年10月

Oracle Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス, 12c (12.2.1.2.0)

E82670-01

Copyright © 1997, 2016 Oracle and/or its affiliates. All rights reserved.

原本著者:  Kathryn Abelson、Joseph Garcia、Ben Gelernter、Tom Pfaeffle、Joe Ruzzi、Rick Sapir、Edwin Spear

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

このドキュメントの情報は、情報共有の目的のみに使用され、顧客諮問委員会の会員の立場で考慮されるか、ベータ・トライアル版契約のみに準じる必要があります。資料、規約または機能性を配信する義務はなく、購買決定に依存すべきではないものとします。このドキュメントに記載されている開発、リリース、およびすべての機能または機能性の時期は、オラクル社の独自の判断に従うものとします。

このドキュメントは、ソフトウェアまたは印刷物などの形式にかかわらず、オラクル社の独占的な財産である機密情報を含みます。この機密資料へのアクセスと使用は、オラクル社との間で締結され遵守に同意したOracle Master Agreement、Oracle License and Services Agreement、Oracle PartnerNetwork Agreement、オラクル販売契約、あるいはその他のライセンス契約の条件にしたがうものとします。オラクル社の文書による事前承諾なしに、このドキュメントおよびここに含まれる情報を開示、コピー、再生、またはオラクル社外部の他者に配布することはできません。このドキュメントは使用許諾契約の一部ではなく、オラクル社の子会社またはアフィリエイトとの契約上の合意に組み込まれません。

目次

例一覧

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

1 概要

- 1.1 EclipseLinkについて

- 1.2 このドキュメントについて

- 1.2.1 その他のリソース

2 注釈の拡張機能リファレンス

- 2.1 注釈の拡張機能の機能リスト

- 2.1.1 マッピング注釈

- 2.1.2 エンティティ注釈

- 2.1.3 コンバータ注釈

- 2.1.4 キャッシング注釈

- 2.1.5 カスタマイズ注釈および最適化注釈

- 2.1.6 コピー・ポリシー注釈

- 2.1.7 リターン・ポリシー注釈

- 2.1.8 ストアド・プロシージャ注釈およびストアド・ファンクション注釈

- 2.1.9 パーティション化注釈

- 2.1.10 非リレーショナル(NoSQL)注釈

- 2.2 注釈の拡張機能のアルファベット順リスト

- @AdditionalCriteria

- @Array

- @BatchFetch

- @Cache

- @CacheIndex

- @CacheIndexes

- @CacheInterceptor

- @CascadeOnDelete

- @ChangeTracking

- @ClassExtractor

- @CloneCopyPolicy

- @CompositeMember

- @ConversionValue

- @Convert

- @Converter

- @Converters

- @CopyPolicy

- @Customizer

- @DeleteAll

- @DiscriminatorClass

- @ExcludeDefaultMappings

- @ExistenceChecking

- @FetchAttribute

- @FetchGroup

- @FetchGroups

- @Field

- @HashPartitioning

- @Index

- @Indexes

- @InstantiationCopyPolicy

- @JoinFetch

- @JoinField

- @JoinFields

- @MapKeyConvert

- @Multitenant

- 単一表マルチテナンシ

- 例

- テナントごとの表マルチテナンシ

- 例

- VPDマルチテナンシ

- 例

- @Mutable

- @NamedPLSQLStoredFunctionQueries

- @NamedPLSQLStoredFunctionQuery

- @NamedPLSQLStoredProcedureQueries

- @NamedPLSQLStoredProcedureQuery

- @NamedStoredFunctionQueries

- @NamedStoredFunctionQuery

- @NamedStoredProcedureQueries

- @NamedStoredProcedureQuery

- @Noncacheable

- @NoSql

- @ObjectTypeConverter

- @ObjectTypeConverters

- @OptimisticLocking

- @OracleArray

- @OracleArrays

- @OracleObject

- @OracleObjects

- @OrderCorrection

- @Partitioned

- @Partitioning

- @PinnedPartitioning

- @PLSQLParameter

- @PLSQLRecord

- @PLSQLRecords

- @PLSQLTable

- @PLSQLTables

- @PrimaryKey

- @PrivateOwned

- @Properties

- @Property

- @QueryRedirectors

- @RangePartition

- @RangePartitioning

- @ReadOnly

- @ReadTransformer

- @ReplicationPartitioning

- @ReturnInsert

- @ReturnUpdate

- @RoundRobinPartitioning

- @SerializedObject

- @StoredProcedureParameter

- @Struct

- @StructConverter

- @StructConverters

- @Structure

- @TenantDiscriminatorColumn

- @TenantDiscriminatorColumns

- @TenantTableDiscriminator

- @TimeOfDay

- @Transformation

- @TypeConverter

- @TypeConverters

- @UnionPartitioning

- @UuidGenerator

- @UnionPartitioning

- @ValuePartition

- @ValuePartitioning

- @VariableOneToOne

- @VirtualAccessMethods

- @WriteTransformer

- @WriteTransformers

3 Java永続性問合せ言語の拡張機能

- 3.1 特殊な演算子

- 3.2 EclipseLink問合せ言語

- CAST

- COLUMN

- EXCEPT

- EXTRACT

- FUNCTION

- INTERSECT

- ON

- OPERATOR

- REGEXP

- SQL

- TABLE

- TREAT

- UNION

4 JPA問合せのカスタマイズ拡張機能

- batch

- batch.size

- batch.type

- cache-usage

- cache-usage.indirection-policy

- cursor

- composite-unit.member

- cursor.initial-size

- cursor.page-size

- exclusive-connection

- flush

- history.as-of

- history.as-of.scn

- inheritance.outer-join

- jdbc.bind-parameters

- jdbc.cache-statement

- jdbc.fetch-size

- jdbc.first-result

- jdbc.max-rows

- jdbc.native-connection

- jdbc.parameter-delimiter

- jdbc.timeout

- join-fetch

- left-join-fetch

- load-group

- load-group.attribute

- maintain-cache

- pessimistic-lock

- prepare

- query-results-cache

- query-results-cache.expiry

- query-results-cache.expiry-time-of-day

- query-results-cache.ignore-null

- query-results-cache.randomize-expiry

- query-results-cache.size

- query-results-cache.type

- query-type

- read-only

- refresh

- refresh.cascade

- result-collection-type

- sql.hint

5 永続性プロパティの拡張機能リファレンス

- 5.1 永続性プロパティの拡張機能の機能別リスト

- 5.1.1 ウィービング

- 5.1.2 カスタマイザ

- 5.1.3 検証および最適化

- 5.1.4 ロギング

- 5.1.5 キャッシング

- 5.1.6 マッピング

- 5.1.7 スキーマ生成

- 5.1.8 JDBC構成

- 5.2 永続性プロパティの拡張機能のアルファベット順リスト

- application-location

- cache.coordination.channel

- cache.coordination.jms.factory

- cache.coordination.jms.host

- cache.coordination.jms.reuse-topic-publisher

- cache.coordination.jms.topic

- cache.coordination.jndi.initial-context-factory

- cache.coordination.jndi.password

- cache.coordination.jndi.user

- cache.coordination.naming-service

- cache.coordination.propagate-asynchronously

- cache.coordination.protocol

- cache.coordination.remove-connection-on-error

- cache.coordination.rmi.announcement-delay

- cache.coordination.rmi.multicast-group

- cache.coordination.rmi.multicast-group.port

- cache.coordination.rmi.packet-time-to-live

- cache.coordination.rmi.url

- cache.coordination.thread.pool.size

- cache.database-event-listener

- cache.shared

- cache.size

- cache.type

- classloader

- composite-unit

- composite-unit.member

- composite-unit.properties

- connection-pool

- connection-pool.read

- connection-pool.sequence

- create-ddl-jdbc-file-name

- ddl-generation

- ddl-generation.output-mode

- ddl.table-creation-suffix

- deploy-on-startup

- descriptor.customizer

- drop-ddl-jdbc-file-name

- exception-handler

- exclude-eclipselink-orm

- flush-clear.cache

- id-validation

- jdbc.allow-native-sql-queries

- jdbc.batch-writing

- jdbc.batch-writing.size

- jdbc.cache-statements

- jdbc.cache-statements.size

- jdbc.connector

- jdbc.exclusive-connection.is-lazy

- jdbc.exclusive-connection.mode

- jdbc.native-sql

- jdbc.property

- jdbc.sql-cast

- jdbc.uppercase-columns

- jpql.parser

- jpa.uppercase-column-names

- jpql.validation

- logging.connection

- logging.exceptions

- logging.file

- logging.level

- logging.logger

- logging.parameters

- logging.session

- logging.thread

- logging.timestamp

- metadata-source

- metadata-source.properties.file

- metadata-source.send-refresh-command

- metadata-source.xml.file

- metadata-source.xml.url

- multitenant.tenants-share-cache

- multitenant.tenants-share-emf

- nosql.connection-factory

- nosql.connection-spec

- nosql.property

- oracle.proxy-type

- orm.throw.exceptions

- orm.validate.schema

- partitioning

- partitioning.callback

- persistence-context.close-on-commit

- persistence-context.commit-without-persist-rules

- persistence-context.flush-mode

- persistence-context.persist-on-commit

- persistence-context.reference-mode

- persistenceunits

- persistencexml

- persisencexml.default

- profiler

- session.customizer

- session.include.descriptor.queries

- session-event-listener

- session-name

- sessions-xml

- target-database

- target-server

- temporal.mutable

- tenant-id

- transaction.join-existing

- tuning

- validate-existence

- validation-only

- weaving

- weaving.changetracking

- weaving.eager

- weaving.fetchgroups

- weaving.internal

- weaving.lazy

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

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

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

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

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

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

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

- 6.1.1.5 埋込み可能クラス

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

例一覧

- 2-1 @AdditionalCriteria Annotationの使用

- 2-2 <additional-criteria> XMLの使用

- 2-3 マルチテナンシの例1

- 2-4 マルチテナンシの例2

- 2-5 @ArrayとOracle VARRAYの使用

- 2-6 @ArrayとPostgreSQL Structの使用

- 2-7 JOIN BatchFetchタイプの使用

- 2-8 EXISTS BatchFetchタイプの使用

- 2-9 IN BatchFetchタイプの使用

- 2-10 @Cache注釈の使用

- 2-11 <cache> XMLの使用

- 2-12 persistence.xmlでのキャッシングの指定

- 2-13 @CacheIndex注釈の使用

- 2-14 <cache-index> XMLの使用

- 2-15 索引問合せのキャッシング

- 2-16 @CacheInterceptor注釈の使用

- 2-17 <cache-interceptor> XMLの使用

- 2-18 @CascadeOnDelete注釈の使用

- 2-19 <cascade-on-delete> XMLの使用

- 2-20 @ChangeTracking注釈の使用

- 2-21 <change-tracking> XMLの使用

- 2-22 persistence.xmlでの変更追跡の指定

- 2-23 @ClassExtractor注釈の使用

- 2-24 <class-extractor> XMLの使用

- 2-25 @CloneCopyPolicy注釈の使用

- 2-26 <clone-copy-policy> XMLの使用

- 2-27 @CompositeMember注釈の使用

- 2-28 <composite-member> XMLの使用

- 2-29 @ConversionValue注釈の使用

- 2-30 <conversion-value> XMLの使用

- 2-31 @Convert注釈の使用

- 2-32 @Converter注釈の使用

- 2-33 <converter> XMLの使用

- 2-34 @CopyPolicy注釈の使用

- 2-35 <copy-policy> XMLの使用

- 2-36 @Customizer注釈の使用

- 2-37 <customizer> XMLの使用

- 2-38 @DeleteAll注釈の使用

- 2-39 <delete-all> XMLの使用

- 2-40 @ExcludeDefaultMappings注釈の使用

- 2-41 @ExistenceChecking注釈の使用

- 2-42 @FetchAttribute注釈の使用

- 2-43 <fetch-group> XMLの使用

- 2-44 @FetchGroup注釈の使用

- 2-45 <fetch-group> XMLの使用

- 2-46 問合せでの名前付きフェッチ・グループの使用

- 2-47 persistence.xmlでのフェッチ・グループの指定

- 2-48 @Index注釈の使用

- 2-49 <index> XMLの使用

- 2-50 @InstantiationCopyPolicy注釈の使用

- 2-51 <instantiation-copy-policy> XMLの使用

- 2-52 @JoinFetch注釈の使用

- 2-53 XMLでの<join-fetch>の使用

- 2-54 @JoinField注釈の使用

- 2-55 XMLでの<join-field>の使用

- 2-56 @MapKeyConvert注釈の使用

- 2-57 <map-key-convert> XMLの使用

- 2-58 最小の@Multitenant注釈

- 2-59 @Multitenantの使用例

- 2-60 <multitenant>の使用例

- 2-61 @Multitenantと@TenantTableDiscriminatorの使用例

- 2-62 <multitenant>と<tenant-table-discriminator>の使用例

- 2-63 @Multitenant (VPD)の使用例

- 2-64 <multitenant>の使用例

- 2-65 @Mutable注釈の使用

- 2-66 persistence.xmlでの可変マッピングの指定

- 2-67 @NamedPLSQLStoredFunctionQuery注釈の使用

- 2-68 @NamedPLSQLStoredProcedureQueries注釈の使用

- 2-69 @NamedPLSQLStoredProcedureQuery注釈の使用

- 2-70 @NamedStoredFunctionQueries注釈の使用

- 2-71 @NamedStoredFunctionQuery注釈の使用

- 2-72 <named-stored-function-query> XMLの使用

- 2-73 @NamedStoredProcedureQueries注釈の使用

- 2-74 @NamedStoredProcedureQuery注釈の使用

- 2-75 <named-stored-procedure-query> XMLの使用

- 2-76 @Noncacheable注釈の使用

- 2-77 <noncacheable> XMLの使用

- 2-78 @NoSql注釈とXMLの使用

- 2-79 @NoSql注釈とJSONの使用

- 2-80 @ObjectTypeConverter注釈の使用

- 2-81 <object-type-converter> XMLの使用

- 2-82 @ObjectTypeConverters注釈の使用

- 2-83 @OptimisticLocking注釈の使用

- 2-84 <optimistic-locking> XMLの使用

- 2-85 @OracleArray注釈の使用

- 2-86 @OracleObject注釈の使用

- 2-87 @OrderCorrection注釈の使用

- 2-88 XMLでの<element-collection>の使用

- 2-89 パーティション化の使用

- 2-90 @RangePartitioningの使用

- 2-91 @Partitioning注釈の使用

- 2-92 @PLSQLRecord注釈の使用

- 2-93 @PLSQLTable注釈の使用

- 2-94 @PrimaryKey注釈の使用

- 2-95 @<primary-key> XMLの使用

- 2-96 @PrivateOwned注釈の使用

- 2-97 @QueryRedirectors注釈の使用

- 2-98 @RangePartitioning注釈の使用

- 2-99 <range-partitioning> XMLの使用

- 2-100 @ReadOnly注釈の使用

- 2-101 <read-only> XMLの使用

- 2-102 @ReturnInsert注釈の使用

- 2-103 <return-insert> XMLの使用

- 2-104 @ReturnUpdate注釈の使用

- 2-105 <return-update> XMLの使用

- 2-106 シリアライズ・オブジェクト・ポリシーの指定

- 2-107 問合せでのシリアライズ・オブジェクト・ポリシーの使用の回避

- 2-108 シリアライズ・オブジェクト・プロパティを使用した検索の回避

- 2-109 @Struct注釈の使用

- 2-110 <struct> XMLの使用

- 2-111 @StructConverter注釈の使用

- 2-112 @StructConverters注釈の使用

- 2-113 <struct-converters> XMLの使用

- 2-114 @Structure注釈の使用

- 2-115 <structure> XMLの使用

- 2-116 @TenantDiscriminatorColumn注釈の使用

- 2-117 <tenant-discriminator-column> XMLの使用

- 2-118 @TenantTableDiscriminator注釈の使用

- 2-119 <tenant-table-discriminator> XMLの使用

- 2-120 @Transformation注釈の使用

- 2-121 <transformation> XMLの使用

- 2-122 @TypeConverter注釈の使用

- 2-123 @TypeConverters注釈の使用

- 2-124 <type-converters> XMLの使用

- 2-125 @UuidGenerator注釈の使用

- 2-126 <generated-value> XMLの使用

- 2-127 persistence.xmlでのジェネレータの指定

- 2-128 @ValuePartition注釈の使用

- 2-129 <partition> XMLの使用

- 2-130 @VariableOneToOne注釈の使用

- 2-131 <variable-one-to-one> XMLの使用

- 2-132 @VirtualAccessMethods注釈の使用

- 2-133 <access>および<access-methods> XMLの使用

- 3-1 CAST EQLの使用

- 3-2 COLUMN EQLの使用

- 3-3 COLUMNとプリミティブ列の使用

- 3-4 EXCEPT EQLの使用

- 3-5 EXTRACT EQLの使用

- 3-6 FUNCTION EQLの使用

- 3-7 FUNCTION EQL Oracle空間の使用例

- 3-8 INTERSECT EQLの使用

- 3-9 ON句のEQの使用

- 3-10 OPERATOR EQLの使用

- 3-11 REGEXP EQLの使用

- 3-12 SQL EQの使用

- 3-13 TABLE EQLの使用

- 3-14 TREAT EQLの使用

- 3-15 UNION EQLの使用

- 4-1 JPA問合せでのbatchの使用

- 4-2 @QueryHint注釈でのbatchの使用

- 4-3 JPA問合せでのbatch.sizeの使用

- 4-4 @QueryHint注釈でのbatch.sizeの使用

- 4-5 JPA問合せでのbatch.typeの使用

- 4-6 @QueryHint注釈でのbatch.typeの使用

- 4-7 JPA問合せでのcache-usageの使用

- 4-8 @QueryHint注釈でのcache-usageの使用

- 4-9 JPA問合せでのcache-usage.indirection-policyの使用

- 4-10 @QueryHint注釈でのcache-usage.indirection-policyの使用

- 4-11 JPA問合せでのcursorの使用

- 4-12 @QueryHint注釈でのcursorの使用

- 4-13 JPA問合せでのcomposite-unit.memberの使用

- 4-14 @QueryHint注釈でのcomposite-unit.memberの使用

- 4-15 JPA問合せでのcursor.initial-sizeの使用

- 4-16 @QueryHint注釈でのcursor.initial-sizeの使用

- 4-17 JPA問合せでのcursor.page-sizeの使用

- 4-18 @QueryHint注釈でのcursor.page-sizeの使用

- 4-19 JPA問合せでのexclusive-connectionの使用

- 4-20 @QueryHint注釈でのexclusive-connectionの使用

- 4-21 JPA問合せでのflushの使用

- 4-22 @QueryHint注釈でのflushの使用

- 4-23 JPA問合せでのhistory.as-ofの使用

- 4-24 @QueryHint注釈でのhistory.as-ofの使用

- 4-25 JPA問合せでのhistory.as-of.scnの使用

- 4-26 @QueryHint注釈でのhistory.as-of.scnの使用

- 4-27 JPA問合せでのinheritance.outer-joinの使用

- 4-28 @QueryHint注釈でのinheritance.outer-joinの使用

- 4-29 JPA問合せでのbind-parametersの使用

- 4-30 @QueryHint注釈でのbind-parametersの使用

- 4-31 パラメータ・バインド永続性ユニット・プロパティの指定

- 4-32 JPA問合せでのjdbc.cache-statementの使用

- 4-33 @QueryHint注釈でのjdbc.cache-statementの使用

- 4-34 JPA問合せでのjdbc.fetch-sizeの使用

- 4-35 @QueryHint注釈でのjdbc.fetch-sizeの使用

- 4-36 JPA問合せでのjdbc.first-resultの使用

- 4-37 JPA問合せでのjdbc.max-rowsの使用

- 4-38 @QueryHint注釈でのjdbc.max-rowsの使用

- 4-39 JPA問合せでのjdbc.native-connectionの使用

- 4-40 JPA問合せでのjdbc.parameter-delimiterの使用

- 4-41 @QueryHint注釈でのjdbc.parameter-delimiterの使用

- 4-42 JPA問合せでのjdbc.timeoutの使用

- 4-43 @QueryHint注釈でのjdbc.timeoutの使用

- 4-44 JPA問合せでのjoin-fetchの使用

- 4-45 @QueryHint注釈でのjoin-fetchの使用

- 4-46 JPA問合せでのleft-join-fetchの使用

- 4-47 @QueryHint注釈でのleft-join-fetchの使用

- 4-48 JPA問合せでのload-groupの使用

- 4-49 @QueryHint注釈でのload-groupの使用

- 4-50 JPA問合せでのmaintain-cacheの使用

- 4-51 @QueryHint注釈でのmaintain-cacheの使用

- 4-52 JPA問合せでのpessimistic-lockの使用

- 4-53 @QueryHint注釈でのpessimistic-lockの使用

- 4-54 JPA問合せでのprepareの使用

- 4-55 @QueryHint注釈でのprepareの使用

- 4-56 JPA問合せでのquery-results-cacheの使用

- 4-57 @QueryHint注釈でのquery-results-cacheの使用

- 4-58 orm.xmlファイルでのquery-results-cacheの使用

- 4-59 JPA問合せでのquery-results-cache.expiryの使用

- 4-60 @QueryHint注釈でのquery-results-cache.expiryの使用

- 4-61 JPA問合せでのquery-results-cache.expiry-time-of-dayの使用

- 4-62 @QueryHint注釈でのquery-results-cache.expiry-time-of-dayの使用

- 4-63 JPA問合せでのquery-results-cache.ignore-nullの使用

- 4-64 @QueryHint注釈でのquery-results-cache.ignore-nullの使用

- 4-65 JPA問合せでのquery-results-cache.randomize-expiryの使用

- 4-66 @QueryHint注釈でのquery-results-cache.randomize-expiryの使用

- 4-67 JPA問合せでのquery-results-cache.sizeの使用

- 4-68 @QueryHint注釈でのquery-results-cache.sizeの使用

- 4-69 JPA問合せでのquery-results-cache.typeの使用

- 4-70 @QueryHint注釈でのquery-results-cache.typeの使用

- 4-71 JPA問合せでのquery-typeの使用

- 4-72 @QueryHint注釈でのquery-typeの使用

- 4-73 JPA問合せでのread-onlyの使用

- 4-74 @QueryHint注釈でのread-onlyの使用

- 4-75 JPA問合せでのrefreshの使用

- 4-76 @QueryHint注釈でのrefreshの使用

- 4-77 JPA問合せでのrefresh.cascadeの使用

- 4-78 @QueryHint注釈でのrefresh.cascadeの使用

- 4-79 JPA問合せでのresult-collection-typeの使用

- 4-80 @QueryHint注釈でのresult-collection-typeの使用

- 4-81 JPA問合せでのsql.hintの使用

- 4-82 @QueryHint注釈でのsql.hintの使用

- 5-1 persistence.xmlでのapplication-locationの使用

- 5-2 プロパティ・マップでのapplication-locationの使用

- 5-3 persistence.xmlでのapplication-locationの使用

- 5-4 プロパティ・マップでのcache.coordination.channelの使用

- 5-5 persistence.xmlでのcache.coordination.jndi.initial-context-factoryの使用

- 5-6 プロパティ・マップでのcache.coordination.jndi.initial-context-factoryの使用

- 5-7 persistence.xmlでのcache.coordination.jndi.passwordの使用

- 5-8 プロパティ・マップでのcache.coordination.jndi.passwordの使用

- 5-9 persistence.xmlでのcache.coordination.naming-serviceの使用

- 5-10 プロパティ・マップでのcache.coordination.naming-serviceの使用

- 5-11 persistence.xmlでのcache.coordination.propagate-asynchronouslyの使用

- 5-12 プロパティ・マップでのcache.coordination.propagate-asynchronouslyの使用

- 5-13 persistence.xmlでのJMSキャッシュ・コーディネーションの構成

- 5-14 persistence.xmlでのRMIキャッシュ・コーディネーションの構成

- 5-15 peristence.xmlでのcache.coordination.remove-connection-on-errorの使用

- 5-16 プロパティ・マップでのcache.coordination.remove-connection-on_errorの使用

- 5-17 persistence.xmlでのcache.coordination.thread.pool.sizeの使用

- 5-18 プロパティ・マップでのcache.coordination.thread.pool.sizeの使用

- 5-19 persistence.xmlでのcache.database-event-listenerの使用

- 5-20 プロパティ・マップでのclassloaderの使用

- 5-21 persistence.xmlでのcomposite-unitの使用

- 5-22 persistence.xmlでのcomposite-unit.memberの使用

- 5-23 プロパティ・マップでのcomposite-unit.propertiesの使用

- 5-24 persistence.xmlでのconnection-poolの使用

- 5-25 persistence.xmlでのconnection-pool.readの使用

- 5-26 persistence.xmlでのconnection-pool.sequenceの使用

- 5-27 persistence.xmlでのddl-generationの使用

- 5-28 プロパティ・マップでのddl-generationの使用

- 5-29 persistence.xmlでのddl.table-creation-suffixの使用

- 5-30 persistence.xmlでのdeploy-on-startupの使用

- 5-31 persistence.xmlでのdescriptor.customizerの使用

- 5-32 プロパティ・マップでのdescriptor.customizerの使用

- 5-33 persistence.xmlでのexception-handlerの使用

- 5-34 プロパティ・マップでのexception-handlerの使用

- 5-35 persistence.xmlでのexclude-eclipselink-ormの使用

- 5-36 persistence.xmlでのflush-clear.cacheの使用

- 5-37 プロパティ・マップでのflush-clear.cacheの使用

- 5-38 persistence.xmlでのid-validationの使用

- 5-39 persistence.xmlでのjdbc.allow-native-sql-queriesの使用

- 5-40 persistence.xmlでのjdbc.batch-writingの使用

- 5-41 プロパティ・マップでのjdbc.batch-writingの使用

- 5-42 persistence.xmlでのjdbc.batch-writing.sizeの使用

- 5-43 persistence.xmlでのjdbc.cache-statementsの使用

- 5-44 プロパティ・マップでのjdbc.cache-statementsの使用

- 5-45 persistence.xmlでのjdbc.cache-statements.sizeの使用

- 5-46 プロパティ・マップでのjdbc.cache-statements.sizeの使用

- 5-47 persistence.xmlでのjdbc.connectorの使用

- 5-48 persistence.xmlでのjdbc.exclusive-connection.is-lazyの使用

- 5-49 プロパティ・マップでのjdbc.exclusive-connection.is-lazyの使用

- 5-50 persitence.xmlでのjdbc.exclusive-connection.modeの使用

- 5-51 プロパティ・マップでのjdbc.exclusive-connection.modeの使用

- 5-52 persistence.xmlでのjdbc.native-sqlの使用

- 5-53 プロパティ・マップでのjdbc.native-sqlの使用

- 5-54 persistence.xmlでのjdbc.propertyの使用

- 5-55 persistence.xmlでのjdbc.sql-castの使用

- 5-56 persistence.xmlでのjdbc.uppercase-column-namesの使用

- 5-57 persistence.xmlでのjpa.uppercase-column-namesの使用

- 5-58 persistence.xmlでのjpql.validationの使用

- 5-59 persistence.xmlでのlogging.connectionの使用

- 5-60 persistence.xmlファイルでのlogging.exceptionsの使用

- 5-61 プロパティ・マップでのlogging.exceptionsの使用

- 5-62 persistence.xmlファイルでのlogging.fileの使用

- 5-63 プロパティ・マップでのlogging.fileの使用

- 5-64 persistence.xmlファイルでのlogging.levelの使用

- 5-65 プロパティ・マップでのlogging.levelの使用

- 5-66 persistence.xmlでのlogging.loggerの使用

- 5-67 プロパティ・マップでのlogging.loggerの使用

- 5-68 persistence.xmlでのlogging.parametersの使用

- 5-69 persistence.xmlファイルでのlogging.sessionの使用

- 5-70 プロパティ・マップでのlogging.sessionの使用

- 5-71 persistence.xmlファイルでのlogging.threadの使用

- 5-72 プロパティ・マップでのlogging.threadの使用

- 5-73 persistence.xmlファイルでのlogging.timestampの使用

- 5-74 プロパティ・マップでのlogging.timestampの使用

- 5-75 persistence.xmlでのmetadata-sourceの使用

- 5-76 persistence.xmlでのmetadata-source.properties.fileの使用

- 5-77 persistence.xmlでのmetadata-source.send-refresh-commandの使用

- 5-78 プロパティ・マップでのmetadata-source-refresh-commandの使用

- 5-79 persistence.xmlでのmetadata-source.xml.fileの使用

- 5-80 persistence.xmlでのmetadata-source.xml.urlの使用

- 5-81 persistence.xmlでのmultitenant.tenants-share-cacheの使用

- 5-82 プロパティ・マップでのmultitenant.tenants-share-cacheの使用

- 5-83 persistence.xmlでのmultitenant.tenants-share-emfの使用

- 5-84 persistence.xmlでのnosql.connection-factoryの使用

- 5-85 persistence.xmlでのnosql.propertyの使用

- 5-86 EntityManagerでのeclipselink.oracle.proxy-typeの使用

- 5-87 persistence.xmlでのorm.throw.exceptionsの使用

- 5-88 プロパティ・マップでのorm.throw.exceptionsの使用

- 5-89 persistence.xmlでのorm.validate.schemaの使用

- 5-90 プロパティ・マップでのorm.validate.schemaの使用

- 5-91 persistence.xmlでのpartitioningの使用

- 5-92 persistence.xmlでのpartitioning.callbackの使用

- 5-93 プロパティ・マップでのpartitioning.callbackの使用

- 5-94 persistence.xmlでのpersistence-context.close-on-commitの使用

- 5-95 プロパティ・マップでのpersistence-context.close-on-commitの使用

- 5-96 persistence.xmlでのpersistence-context.commit-without-persist-rulesの使用

- 5-97 プロパティ・マップでのpersistence-context.commit-without-persist-rulesの使用

- 5-98 persistence.xmlでのpersistence-context.flush-modeの使用

- 5-99 プロパティ・マップでのpersistence-context.flush-modeの使用

- 5-100 persistence.xmlでのpersistence-context.persist-on-commitの使用

- 5-101 プロパティ・マップでのpersistence-context.persis-on-commitの使用

- 5-102 persistence.xmlでのpersistence-context.reference-modeの使用

- 5-103 プロパティ・マップでのpersistence-context.reference-modeの使用

- 5-104 persistence.xmlでのpersistenceunitsの使用

- 5-105 persistence.xmlでのpersistencexmlの使用

- 5-106 プロパティ・マップでのpersistencexml.defaultの使用

- 5-107 persistence.xmlでのprofilerの使用

- 5-108 プロパティ・マップでのprofilerの使用

- 5-109 persistence.xmlでのsession.customizerの使用

- 5-110 プロパティ・マップでのsession.customizerの使用

- 5-111 persistence.xmlでのsession.include.descriptor.queriesの使用

- 5-112 プロパティ・マップでのsession.include.descriptor.queriesの使用

- 5-113 persistence.xmlでのsession-event-listenerの使用

- 5-114 プロパティ・マップでのsession-event-listenerの使用

- 5-115 persistence.xmlでのsession-nameの使用

- 5-116 プロパティ・マップでのsession-nameの使用

- 5-117 persistence.xmlファイルでのsessions-xmlの使用

- 5-118 プロパティ・マップでのsessions-xmlの使用

- 5-119 persistence.xmlでのtarget-databaseの使用

- 5-120 プロパティ・マップでのtarget-databaseの使用

- 5-121 persistence.xmlでのtarget-serverの使用

- 5-122 プロパティ・マップでのtarget-serverの使用

- 5-123 persistence.xmlでのtemporal.mutableの使用

- 5-124 プロパティ・マップでのtemporal.mutableの使用

- 5-125 persistence.xmlでのtenant-idの使用

- 5-126 プロパティ・マップでのtenant-idの使用

- 5-127 persistence.xmlでのtransaction.join-existingの使用

- 5-128 プロパティ・マップでのtransaction.join-existingの使用

- 5-129 persistence.xmlでのtuningの使用

- 5-130 persistence.xmlでのvalidate-existenceの使用

- 5-131 プロパティ・マップでのvalidate-existenceの使用

- 5-132 persistence.xmlでのvalidation-onlyの使用

- 5-133 プロパティ・マップでのvalidation-onlyの使用

- 5-134 persistence.xmlでのweavingの使用

- 5-135 プロパティ・マップでのweavingの使用

- 5-136 persistence.xmlでのweaving.changetrackingの使用

- 5-137 プロパティ・マップでのweaving.changetrackingの使用

- 5-138 persistence.xmlでのweavingの使用

- 5-139 プロパティ・マップでのweavingの使用

- 5-140 persistence.xmlでのweaving.fetchgroupsの使用

- 5-141 プロパティ・マップでのweaving.fetchgroupsの使用

- 5-142 persistence.xmlでのweavingの使用

- 5-143 プロパティ・マップでのweavingの使用

- 5-144 persistence.xmlでのweaving.lazyの使用

- 5-145 プロパティ・マップでのweaving.lazyの使用

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

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

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

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

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

はじめに

EclipseLinkのJPA実装はEclipseLinkにより提供されています。

EclipseLink JPAでは、標準のJava Persistence Architecture (JPA)の注釈がサポートされていることに加えて、特定の注釈(EclipseLink拡張機能)も使用できます。これらのEclipseLink拡張機能を使用して、JPAエンティティ内で拡張されたEclipseLinkの機能を利用できます。

対象読者

このドキュメントは、EclipseLinkのJava Persistence Architecture (JPA)を使用してアプリケーションを開発するアプリケーション開発者を対象としています。このドキュメントでは、関連する一般的なタスクの詳細は説明せず、EclipseLinkの機能を中心に説明します。

開発者は、次の概念およびプログラミング技法を十分に理解している必要があります。

- Java SEおよびJava EE

- Java Persistence Architecture 2.0仕様(http://jcp.org/en/jsr/detail?id=317)

- EclipseLink (http://www.eclipse.org/eclipselink)

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご購入のOracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=accid=infoまたはhttp://www.oracle.com/pls/topic/lookup?ctx=accid=trs (聴覚障害者向け)を参照してください。

関連ドキュメント

詳細は、次のドキュメントを参照してください。

- EclipseLinkの理解

- EclipseLinkソリューション・ガイド

- Oracle Fusion Middleware EclipseLink Java APIリファレンス

- EclipseLink Documentation Center (http://www.eclipse.org/eclipselink/documentation/)

- Oracle TopLinkリリース・ノート

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

1 概要

この章では、EclipseLinkの概要を説明します。EclipseLinkは、オブジェクトの永続性およびオブジェクト・トランスフォーメーションのための高度なフレームワークを提供します。開発やメンテナンスのコストを軽減し、エンタープライズ・アプリケーションの機能を向上させる開発ツールおよびランタイム機能が用意されています。

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

- EclipseLinkについて

- このドキュメントについて

1.1 EclipseLinkについて

EclipseLinkは、広範なJava Enterprise Edition (Java EE)およびJavaアプリケーション・アーキテクチャでの使用に適しています。EclipseLinkは、次に列挙した形式を含む、様々なデータ・ソースおよび形式をサポートする高度なオブジェクト永続性およびオブジェクト変換レイヤーを設計、実装、デプロイおよび最適化するために使用します。

- JPA: オブジェクト・リレーショナル永続性用。JPA (Java Persistence API)仕様およびネイティブAPIをサポートします。

- NoSQL: JPAおよびネイティブAPIを介した非リレーショナルNoSQLおよびEISデータベースのオブジェクト永続性用。

- JAXB: Object-XML変換用。JAXB (Java Architecture for XML Binding)仕様およびネイティブAPIをサポートします。

- JSON: object-JSON (JavaScript Object Notation)変換用。

- DBWS: データベース表およびストアド・プロシージャからのWebサービス生成用。

EclipseLinkのネイティブAPIは、次のとおりです。

- リレーショナル: Java Database Connectivity (JDBC)ドライバを使用してアクセスされるリレーショナル・データベースに対するJavaオブジェクトのトランザクション永続性用。

- オブジェクト・リレーショナル・データ・タイプ: Oracle Databaseなど、オブジェクト・リレーショナル・データ・タイプ・データベースに格納するために最適化された特別な構造を持つデータ・ソース表現に対するJavaオブジェクトのトランザクション永続性用。

- 企業情報システム(EIS): Java EE Connector Architecture (JCA)アダプタを使用してアクセスされる非リレーショナル・データ・ソースへのJavaオブジェクトおよびサポートされているEISレコード・タイプ(索引付き、マップ済、XMLなど)の、トランザクション永続性用。

- XML: Javaオブジェクトと、Java Architecture for XML Binding (JAXB)を使用するXML Schema Document (XSD)ベースのXMLドキュメントとの間の非トランザクション、非永続(インメモリー)変換用。

EclipseLinkには、次の様々なアプリケーション・サーバーとの統合を含むJava EEおよびJava SE環境での、EJB 3.0およびJava Persistence API (JPA)のサポートが含まれています。

- Oracle WebLogic Server

- Oracle GlassFish Server

- JBoss Web Server

- IBM WebSphere application server

- SAP NetWeaver

- Oracle Containers for Java EE (OC4J)

- Apache Tomcat、Eclipse Gemini、IBM WebSphere CE、SpringSource tcServerなどのその他の様々なWebコンテナ

EclipseLinkによって、オブジェクトとデータ・ソースおよびオブジェクトとデータ表現のマッピングを、柔軟で効率的なメタデータ形式で迅速に取得および定義できます。

EclipseLinkランタイムにより、アプリケーションは、JPAやJAXBなどの標準APIとそれらの標準に対するEclipseLink固有の拡張機能の詳細なサポートを提供する簡単なセッション・ファサードとともにこのマッピング・メタデータを利用できます。

EclipseLinkの詳細は、EclipseLinkの理解を参照してください。

1.2 このドキュメントについて

EclipseLinkには、EclipseLink、永続性プロバイダとしてのJava Persistence Architecture (JPA) 2.0仕様のリファレンス実装が含まれます。多くの拡張機能も含まれています。

このドキュメントでは、EclipseLinkのJPAへの拡張機能について説明します。コアJPAの完全ドキュメントは、JPA仕様を参照してください。必要に応じて、このドキュメントでは、仕様の該当セクションへのリンクを示します。

1.2.1 その他のリソース

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

- Oracle Technology Network (OTN)のEclipseLink。http://www.oracle.com/technetwork/middleware/toplink/overview/index.html

- JPAの詳細は、Java永続性の仕様を参照してください。http://jcp.org/en/jsr/detail?id=317

- EclipseLinkのJPAのサポートの詳細は、EclipseLinkドキュメント・センターを参照してください。http://www.eclipse.org/eclipselink/documentation/

- コアJPAおよびEclipseLink拡張機能の詳細は、EclipseLink API参照ドキュメント(Javadoc)を参照してください。http://www.eclipse.org/eclipselink/api/

- JPA永続性の構成ファイルのスキーマhttp://java.sun.com/xml/ns/persistence/persistence_2_0.xsd

- 永続性オブジェクト/リレーショナル・マッピング・ファイルのスキーマhttp://java.sun.com/xml/ns/persistence/orm_2_0.xsd

- ネイティブなEclipseLinkマッピング・ファイルのスキーマhttp://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_0.xsd

- 多数のEclipseLink JPA機能の使用方法を表示した例http://wiki.eclipse.org/EclipseLink/Examples/

- JavaEEおよびJPAのチュートリアル。このチュートリアルにEclipseLink固有の情報は含まれませんが、JPA 2.0アプリケーションの実装に役立つ情報が含まれています。http://download.oracle.com/javaee/5/tutorial/doc/bnbpy.html

- Java永続性。JPA 2.0に関するwikiベースの「オープン・ブック」。http://en.wikibooks.org/wiki/Java_Persistence

2 注釈の拡張機能リファレンス

この章では、EclipseLinkのJava Persistence API (JPA)注釈の拡張機能について説明します。EclipseLinkでは、Java Persistence API (JPA) 2.0仕様がサポートされています。多くの拡張機能も含まれています。

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

- 注釈の拡張機能の機能リスト

- 注釈の拡張機能のアルファベット順リスト

2.1 注釈の拡張機能の機能リスト

次に、機能ごとにカテゴリ化されたEclipseLinkの注釈の拡張機能を示します。

- マッピング注釈

- エンティティ注釈

- コンバータ注釈

- キャッシング注釈

- カスタマイズ注釈および最適化注釈

- コピー・ポリシー注釈

- リターン・ポリシー注釈

- ストアド・プロシージャ注釈およびストアド・ファンクション注釈

- パーティション化注釈

- 非リレーショナル(NoSQL)注釈

2.1.1 マッピング注釈

EclipseLinkには、次のマッピングに関する注釈の拡張機能が含まれています。

- @PrivateOwned

- @JoinFetch

- @Mutable

- @Property

- @Transformation

- @ReadTransformer

- @WriteTransformer

- @WriteTransformers

2.1.2 エンティティ注釈

EclipseLinkには、次のエンティティに関する注釈の拡張機能が含まれています。

- @AdditionalCriteria

- @ExcludeDefaultMappings

- @Multitenant

- @OptimisticLocking

- @ReadOnly

- @SerializedObject

- @TenantDiscriminatorColumns

- @TenantDiscriminatorColumn

- @TenantTableDiscriminator

- @Struct

2.1.3 コンバータ注釈

EclipseLinkには、次のデータ変換に関する注釈の拡張機能が含まれています。

- @Convert

- @Converter

- @Converters

- @TypeConverter

- @TypeConverters

- @ObjectTypeConverter

- @ObjectTypeConverters

- @StructConverter

- @StructConverters

2.1.4 キャッシング注釈

EclipseLinkには、次のキャッシングに関する注釈の拡張機能が含まれています。

- @Cache

- @CacheIndex

- @CacheIndexes

- @CacheInterceptor

- @TimeOfDay

- @ExistenceChecking

2.1.5 カスタマイズ注釈および最適化注釈

EclipseLinkには、次のカスタマイズおよび最適化に関する注釈の拡張機能が含まれています。

- @Customizer

- @ChangeTracking

2.1.6 コピー・ポリシー注釈

EclipseLinkには、次のコピー・ポリシーに関する注釈の拡張機能が含まれています。

- @CloneCopyPolicy

- @CopyPolicy

- @InstantiationCopyPolicy

2.1.7 リターン・ポリシー注釈

EclipseLinkには、次のリターン・ポリシーに関する注釈の拡張機能が含まれています。

- @ReturnInsert

- @ReturnUpdate

2.1.8 ストアド・プロシージャ注釈およびストアド・ファンクション注釈

EclipseLinkには、次のストアド・プロシージャおよびストアド・ファンクションに関する注釈の拡張機能が含まれています。

- @NamedPLSQLStoredFunctionQueries

- @NamedPLSQLStoredFunctionQuery

- @NamedPLSQLStoredProcedureQueries

- @NamedPLSQLStoredProcedureQuery

- @NamedStoredFunctionQueries

- @NamedStoredFunctionQuery

- @NamedStoredProcedureQueries

- @NamedStoredProcedureQuery

- @OracleArray

- @OracleArrays

- @OracleObject

- @OracleObjects

- @PLSQLParameter

- @PLSQLRecord

- @PLSQLRecords

- @PLSQLTable

- @PLSQLTables

- @StoredProcedureParameter

2.1.9 パーティション化注釈

EclipseLinkには、次のパーティションの使用に関する注釈の拡張機能が含まれています。

- @HashPartitioning

- @Partitioned

- @Partitioning

- @PinnedPartitioning

- @RangePartition

- @RangePartitioning

- @ReplicationPartitioning

- @RoundRobinPartitioning

- @UnionPartitioning

- @ValuePartitioning

2.1.10 非リレーショナル(NoSQL)注釈

EclipseLinkには、次の非リレーショナル・データ・ソースに関する注釈の拡張機能が含まれています。

- @Field

- @JoinField

- @JoinFields

- @NoSql

2.2 注釈の拡張機能のアルファベット順リスト

次に、EclipseLinkの注釈の拡張機能を示します。

- @AdditionalCriteria

- @Array

- @BatchFetch

- @Cache

- @CacheIndex

- @CacheIndexes

- @CacheInterceptor

- @CascadeOnDelete

- @ChangeTracking

- @ClassExtractor

- @CloneCopyPolicy

- @CompositeMember

- @ConversionValue

- @Convert

- @Converter

- @Converters

- @CopyPolicy

- @Customizer

- @DeleteAll

- @DiscriminatorClass

- @ExcludeDefaultMappings

- @ExistenceChecking

- @FetchAttribute

- @FetchGroup

- @FetchGroups

- @Field

- @HashPartitioning

- @Index

- @Indexes

- @InstantiationCopyPolicy

- @JoinFetch

- @JoinField

- @JoinFields

- @MapKeyConvert

- @Multitenant

- @Mutable

- @NamedPLSQLStoredFunctionQueries

- @NamedPLSQLStoredProcedureQuery

- @NamedStoredFunctionQueries

- @NamedStoredFunctionQuery

- @NamedStoredProcedureQueries

- @NamedStoredProcedureQuery

- @Noncacheable

- @NoSql

- @ObjectTypeConverter

- @ObjectTypeConverters

- @OptimisticLocking

- @OracleArray

- @OracleArrays

- @OracleObject

- @OracleObjects

- @OrderCorrection

- @Partitioned

- @Partitioning

- @PinnedPartitioning

- @PLSQLParameter

- @PLSQLRecord

- @PLSQLRecords

- @PLSQLTable

- @PLSQLTables

- @PrimaryKey

- @PrivateOwned

- @Properties

- @Property

- @QueryRedirectors

- @RangePartition

- @RangePartitioning

- @ReadOnly

- @ReadTransformer

- @ReplicationPartitioning

- @ReturnInsert

- @ReturnUpdate

- @RoundRobinPartitioning

- @SerializedObject

- @StoredProcedureParameter

- @Struct

- @StructConverter

- @StructConverters

- @Structure

- @TenantDiscriminatorColumns

- @TenantDiscriminatorColumn

- @TenantTableDiscriminator

- @TimeOfDay

- @Transformation

- @TypeConverter

- @TypeConverters

- @ValuePartition

- @ValuePartitioning

- @UuidGenerator

- @UnionPartitioning

- @VariableOneToOne

- @VirtualAccessMethods

- @WriteTransformer

- @WriteTransformers

@AdditionalCriteria

@AdditionalCriteriaを使用して、データに対するパラメータ化された表示を定義します。

エンティティまたはマップされたスーパークラスに対して、追加基準を定義できます。追加基準の定義は、マップされたスーパークラス・レベルで指定すると、エンティティによって独自の追加基準が定義されている場合(この場合、マップされたスーパークラスに定義された基準は無視されます)を除き、すべての継承エンティティに適用されます。

注釈要素

表2-1は、この注釈の要素を示しています。

表2-1 @AdditionalCriteriaの注釈要素

属性

説明

デフォルト

value

(必須)追加基準として使用するJPQLフラグメント

使用方法

追加基準により、問合せに追加のフィルタリング・メカニズムを提供できます。このフィルタリング・オプションには、たとえば、エンティティまたはマップされたスーパークラスに定義された、既存の追加のJOIN式を使用したり、パラメータを渡すことができます。

追加基準のパラメータは、エンティティ・マネージャ・ファクトリまたはエンティティ・マネージャのプロパティを介して設定します。エンティティ・マネージャで設定されたプロパティは、エンティティ・マネージャ・ファクトリで設定された同じ名前のプロパティ・セットをオーバーライドします。問合せを実行する前に、エンティティ・マネージャでプロパティを設定する必要があります。エンティティ・マネージャの存続期間のプロパティは変更しないでください。

注意:
追加基準は、ネイティブSQL問合せではサポートされていません。

例

@AdditionalCriteria注釈または<additional-criteria>要素を使用して、追加基準を指定します。追加基準の定義では、すべての有効なJPQL文字列がサポートされており、追加基準を形成するために、別名としてthisを使用する必要があります。次に例を示します。

@AdditionalCriteria("this.address.city IS NOT NULL")

例2-1に、エンティティEmployeeに対して定義された追加基準を示し、次に、エンティティ・マネージャに対して設定された追加基準のパラメータを示します。

例2-1 @AdditionalCriteria注釈の使用

次のように、Employeeに対して追加基準を定義します。

package model;

@AdditionalCriteria("this.company=:COMPANY")
public class Employee {

...
}

EntityManagerに対してプロパティを設定します。この例では、MyCompanyのすべての従業員が戻されます。

entityManager.setProperty("COMPANY", "MyCompany");

例2-2では、前と同じ例を示しますが、eclipselink-orm.xmlマッピング・ファイルの<additional-criteria>要素を使用します。

例2-2 <additional-criteria> XMLの使用

<additional-criteria>
<criteria>this.address.city IS NOT NULL</criteria>
</additional-criteria>

追加基準の用途

追加基準には、次のような用途があります。

- マルチテナンシ

- ソフト削除

- データ履歴

- 一時的なフィルタリング

- 共有表

マルチテナンシ

マルチテナンシ環境では、テナント(ユーザー、クライアント、組織、アプリケーション)はデータベース表を共有できますが、データの表示は、テナントがそれ自身のデータにのみアクセスできるように制限されます。追加基準を使用して、そのような制限を構成できます。

注意:
ほとんどの場合、次に示すとおり、マルチテナンシ環境では、かわりに@Multitenant注釈を使用します。

例2-3 マルチテナンシの例1

次の例では、請求アプリケーションまたは請求組織などのBillingクライアントのデータを制限します。

@AdditionalCriteria("this.tenant = 'Billing'")

例2-4 マルチテナンシの例2

次の例は、同時に複数のテナントによって使用されるアプリケーションで使用できます。追加基準は、次のように定義されます。

@AdditionalCriteria("this.tenant = :tenant")

テナントがEntityManagerFactoryまたはEntityManagerを取得すると、永続性/エンティティ・マネージャ・プロパティのテナントが、それを取得しているテナントの名前に設定されます。次に例を示します。

Map properties = new HashMap();
properties.put("tenant", "ACME");
EntityManagerFactory emf = Persistence.createEntityManagerFactory(properties);

または

Map properties = new HashMap();
properties.put("tenant", "ACME");
EntityManager em = factory.createEntityManager(properties);

ソフト削除

次の例では、削除するようにマークされている(ものの、表に存在する)データを問合せからフィルタリングします。

@AdditionalCriteria("this.isDeleted = false")

データ履歴

次の例では、問合せから最新データを戻すことによって、履歴表に格納されているデータなどの最新でないデータをフィルタリングします。

@AdditionalCriteria("this.endDate is null")

注意:
EclipseLinkは、HistoryPolicy経由で特定の履歴サポートも提供しています。詳細は、EclipseLinkの理解の履歴ポリシーに関する項を参照してください。

一時的なフィルタリング

次の例では、特定の日付にフィルタリングします。

@AdditionalCriteria("this.startDate <= :viewDate and this.endDate >= :viewDate")

共有表

共有表では、表に継承があり、オブジェクト・モデルにはない場合があります。たとえば、SavingsAccountクラスがACCOUNT表にマップされており、ACCOUNT表には預金口座データ(SAVINGS)と当座預金口座データ(CHECKING)の両方が含まれている場合があります。追加基準を使用して、当座預金口座データをフィルタリングできます。

関連項目

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

- 「COLUMN」

- 「@Multitenant」

@Array

@Arrayを使用して、OracleのVARRAY型やPostgreSQL JDBCのArray型など、特定のデータベースによってサポートされるオブジェクト・リレーショナル・データ・タイプを定義します。

注釈要素

表2-2は、この注釈の要素を示しています。

表2-2 @Arrayの注釈要素

注釈要素

説明

デフォルト

databaseType

(必須)データベースの配列の構造型の名前

targetClass

(Javaの汎用型を使用してコレクション・フィールドまたはプロパティが定義される場合のみオプション、それ以外の場合は必須)コレクションの要素タイプであるクラス(基本または埋込み可能)

コレクションのパラメータ化型

使用方法

@Arrayは、Array型に永続化されるコレクション属性に対して使用します。コレクションは、基本タイプまたはStructを使用してマップされる埋込み可能クラスにできます。

例

例2-5に、Oracle VARRAY型とともにこの注釈を使用する方法を示します。

例2-5 @ArrayとOracle VARRAYの使用

VARRAY DDL:
CREATE TYPE TASKS_TYPE AS VARRAY(10) OF VARCHAR(100)

@Struct
@Entity
public class Employee {
@Id
private long id;
@Array(databaseType="TASKS_TYPE")
private List<String> tasks;
}

例2-6に、PostgreSQL Struct型とともにこの注釈を使用する方法を示します。

例2-6 @ArrayとPostgreSQL Structの使用

DDL:
CREATE TABLE EMPLOYEE (ID BIGINT, TASKS TEXT[])

@Struct
@Entity
public class Employee {
@Id
private long id;
@Array(databaseType="TEXT[]")
private List<String> tasks;
}

関連項目

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

- 「@Struct」

- EclipseLinkの理解

- EclipseLinkソリューション・ガイド

@BatchFetch

@BatchFetchを使用して、単一の問合せで読み取られる関連マッピング(@OneToOne、@OneToMany、@ManyToMany、@ElementCollectionなど)に関連するオブジェクトを読み取ります。

注釈要素

表2-3は、この注釈の要素を示しています。

表2-3 @BatchFetchの注釈要素

注釈要素

説明

デフォルト

size

バッチ・フェッチのデフォルトのサイズ。BatchFetchType=INが各IN句のキーの数を定義する場合にのみ使用されます。

256または問合せのpageSize (カーソル問合せの場合)

BatchFetchType

(オプション)使用するバッチ・フェッチのタイプは、次のとおりです。

- JOIN: 元の問合せの選択基準は、バッチ問合せと結合されます。

- EXISTS: バッチ問合せでJOINではなくSQL EXISTS句と下位選択を使用します。

- IN: バッチ問合せでSQL IN句を使用し、ソース・オブジェクトIDを渡します。

JOIN

使用方法

バッチ・フェッチにより、ツリーの最適なロードが可能になります。@BatchFetch注釈をツリー構造の子関係で設定すると、EclipseLinkは、各レベルに対して1つのSQL文を使用します。たとえば、PHONEにEMPLOYEEに対する外部キーがあるEMPLOYEE表およびPHONE表を使用してオブジェクトについて考えます。デフォルトでは、従業員のアドレス・リストを読み取るには、従業員のアドレスごとの、n回の問合せが必要になります。バッチ・フェッチでは、すべてのアドレスに対して1つの問合せを使用します。

BatchFetchType=EXISTSの使用にはSQL DISTINCT文(LOBに関する問題が発生する可能性があります)が必要ないため、一部のタイプの問合せや、特定のデータベースでは、より効率的である場合があります。

BatchFetchType=INを使用すると、EclipseLinkでは、まだキャッシュにないオブジェクトのみを選択します。この方法は、カーソルやページ区切りに対して、またはJOINを使用できない状況において、より役立つ場合があります。一部のデータベースでは、シングルトンIDに対してのみ機能します。

例

次の例では、様々なバッチ・フェッチ・タイプとともにこの注釈(およびXML)を使用する方法を示します。

例2-7 JOIN BatchFetchタイプの使用

@OneToOne
@BatchFetch(BatchFetchType.JOIN)
private Address address;

<one-to-one name="address">
<batch-fetch type="JOIN" />
</one-to-one>

例2-8 EXISTS BatchFetchタイプの使用

@BatchFetch(BatchFetchType.EXISTS)
@OneToOne
public Map<String, String> getStringMap() {
return stringMap;
}

<one-to-one name="StringMap">
<batch-fetch type="EXISTS"/>
</one-to-one>

例2-9 IN BatchFetchタイプの使用

@BatchFetch(BatchFetchType.IN, size=50)
@OneToOne
public Map<String, String> getStringMap() {
return stringMap;
}

<one-to-one name="StringMap">
<batch-fetch type="IN" size="50" />
</one-to-one>

関連項目

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

- 「@JoinFetch」

- EclipseLinkの理解

- EclipseLinkソリューション・ガイド

@Cache

@Cacheを(JPA @Cachable注釈のかわりに)使用して、EclipseLinkオブジェクト・キャッシュを構成します。デフォルトでは、EclipseLinkは、共有オブジェクト・キャッシュを使用してすべてのオブジェクトをキャッシュします。最適なキャッシングを可能にするために、クラスごとにキャッシュのタイプとオプションを構成できます。

注釈要素

表2-4は、この注釈の要素を示しています。

表2-4 @Cacheの注釈要素

注釈要素

説明

デフォルト

type

(オプション)この属性を、次の項目を使用するキャッシュのタイプ(org.eclipse.persistence.annotations.CacheType列挙型)に設定します。

- FULL

- WEAK

- SOFT

- SOFT_WEAK

- HARD_WEAK

- CACHE (非推奨)

- NONE (非推奨、かわりにisolation=ISOLATEDを使用)

次の永続性ユニット・プロパティで、この属性をオーバーライドできます。

- eclipselink.cache.type.<ENTITY>

- eclipselink.cache.type.default

CacheType.SOFT_WEAK

size

(オプション) int値にこの属性を設定して、使用するキャッシュ・サイズ(オブジェクト数)を定義します。

100

isolation

(オプション)エンティティのキャッシュ・レベル。

- shared: エンティティ・インスタンスは、EntityManagerFactory/ServerSessionレベル内でキャッシュされます

- isolated: エンティティとそのデータは、共有キャッシュに格納されるのではなく、永続性コンテキスト/UnitOfWorkまたはIsolatedClientSessionに分離されます

- protected: エンティティの状態情報は共有キャッシュにキャッシュされますが、エンティティ・インスタンスは共有されません

shared

expiry

(オプション)int値(ミリ秒)で指定し、キャッシュされるインスタンスの失効が一定期間後に有効になるようにします。その後、キャッシュに対して実行される問合せは、コピーがリフレッシュされるように、データベースに強制的に戻されます。

失効なし

expiryTimeOfDay

(オプション)キャッシュされるインスタンスの有効期限が切れる特定の時刻(org.eclipse.persistence.annotations.TimeOfDay)。その後、キャッシュに対して実行される問合せは、コピーがリフレッシュされるように、データベースに強制的に戻されます。

失効なし

alwaysRefresh

(オプション) trueのブール値に設定すると、データベースにアクセスするすべての問合せによって、常にキャッシュがリフレッシュされます。

false

refreshOnlyIfNewer

(オプション) trueのブール値に設定すると、問合せがデータベースから受け取るデータがキャッシュのデータよりも新しい(オプティミスティック・ロック・フィールドによって判別)場合にのみ、データベースにアクセスするすべての問合せによって、キャッシュがリフレッシュされます

注意:

- このオプションは、alwaysRefreshなどの他のリフレッシュ・オプションのいずれかがすでに有効になっている場合にのみ適用されます。

- この機能を適用するには、バージョン・フィールドが必要となります。

false

disableHits

(オプション) trueのブール値に設定すると、すべての問合せに対して、キャッシュでのヒットを取得しない一方で、アイデンティティはキャッシュに対して解決することが強制されます。これにより、すべての問合せによってデータベースのヒットが取得されます。

false

coordinationType

(オプション)この属性をキャッシュ・コーディネーション・モード(org.eclipse.persistence.annotations.CacheCoordinationType列挙型)に設定します。

- SEND_OBJECT_CHANGES: 変更に関するデータを含む、変更されたオブジェクトのリストが送信されます。このデータは、受信キャッシュにマージされます。

- INVALIDATE_CHANGED_OBJECTS: 変更されたオブジェクトのIDリストが送信されます。受信キャッシュでは、データを変更するのではなく、オブジェクトが無効にされます。

- SEND_NEW_OBJECTS_WITH_CHANGES: トランザクションで新規作成されたオブジェクトも含まれる点以外はSEND_OBJECT_CHANGESオプションと同じです。

- NONE: キャッシュ・コーディネーションは行われません。

永続性ユニット・プロパティでもキャッシュ・コーディネーションを構成する必要があります。「キャッシング」を参照してください。

SEND_OBJECT_CHANGES

databaseChangeNotificationType

(オプション)データベース変更通知モード。

- Invalidate: データベース変更イベントをオブジェクトに対して受信した場合に、EclipseLinkキャッシュを無効にします。

- None: データベース変更イベントは処理されません。永続性ユニット/セッションにもデータベース・イベント・リスナーを構成する必要があります。

INVALIDATE

使用方法

JPA @Cachable注釈のかわりに@Cache注釈を使用して、キャッシュ構成を追加します。

@Cache注釈は、次のものに定義できます。

- @Entity

- @MappedSuperclass

- 継承階層のルート(該当する場合)

継承サブクラスで@Cache注釈を定義すると、注釈は無視されます。@Embeddableで@Cache注釈を定義すると、EclipseLinkは例外をスローします。

EclipseLinkでのキャッシング

EclipseLinkキャッシュは、クラスと主キーの値に基づいて最近読み取られたり書き込まれたオブジェクトが格納される、インメモリー・リポジトリです。EclipseLinkでは、次の目的でこのキャッシュが使用されます。

- 最近読み取られたり書き込まれたオブジェクトを保持し、メモリー内でそれらにアクセスしてデータベースへのアクセスを最小限にすることで、パフォーマンスを向上させます。

- ロックと分離レベルを管理します。

- オブジェクト・アイデンティティを管理します。

EclipseLinkキャッシュとそのデフォルトの動作の詳細は、次を参照してください。

- EclipseLinkの理解のキャッシングの理解に関する項

- EclipseLinkソリューション・ガイドのオブジェクト・キャッシングに関する項

- EclipseLinkには、次のエンティティ・キャッシング注釈が定義されています。

- @Cache

- @TimeOfDay

- @ExistenceChecking

EclipseLinkにより、キャッシュを構成するために指定できる多数の永続性ユニット・プロパティも提供されます。これらのプロパティを注釈のかわりに使用したり、注釈を補完できる場合があります。

詳細は、「キャッシング」を参照してください。

例

例2-10では、@Cache注釈を示します。

例2-10 @Cache注釈の使用

...
@Entity
@Cache(
type=CacheType.SOFT, // Cache everything until the JVM decides memory is low.
size=64000  // Use 64,000 as the initial cache size.
expiry=36000000,  // 10 minutes
coordinationType=CacheCoordinationType.INVALIDATE_CHANGED_OBJECTS  // if cache coordination is used, only send invalidation messages.
)
public class Employee {
...
}

例2-11に、eclipselink-orm.xmlファイルのこの注釈を使用する方法を示します。

例2-11 <cache> XMLの使用

<entity-mappings
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/orm
http://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_4.xsd"
version="2.4">
<entity name="Employee" class="org.acme.Employee" access="FIELD">
<cache type="SOFT" size="64000" expiry="36000000" coordination-type="INVALIDATE_CHANGED_OBJECTS"/>
</entity>
</entity-mappings>

また、ここに示すように、永続性ユニット・レベル(persistence.xmlファイル)でキャッシング・プロパティを指定することもできます。

例2-12 persistence.xmlでのキャッシングの指定

<persistence 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 persistence_2_0.xsd"
version="2.0">
<persistence-unit name="acme" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.cache.shared.Employee" value="true"/>
<property name="eclipselink.cache.type.Employee" value="SOFT"/>
<property name="eclipselink.cache.size.Employee" value="64000"/>
</properties>
</persistence-unit>
</persistence>

関連項目

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

- 「@ExistenceChecking」

- 「@TimeOfDay」

- 「@CacheInterceptor」

- EclipseLinkの理解のキャッシングの理解に関する項

- EclipseLinkソリューション・ガイドのオブジェクト・キャッシングに関する項

@CacheIndex

@CacheIndexを使用して、キャッシュされる索引を定義します。キャッシュ索引は、キャッシングが有効なときにのみ使用されます。

注釈要素

表2-5は、この注釈の要素を示しています。

表2-5 @CacheIndexの注釈要素

注釈要素

説明

デフォルト

columnNames

(オプション)索引を定義する一連の列。フィールド/メソッドに注釈が付けられている場合は不要です。

updateable

(オプション)索引付きのフィールドが更新可能かどうかを指定します。

trueの場合、各更新またはリフレッシュでオブジェクトを再度索引付けします。

true

使用方法

キャッシュ索引により、索引付きのフィールドで問合せするときに、singleResult問合せでキャッシュ・ヒットを取得できます。すべてのオブジェクトがメモリー内にあるかどうかは不明なため(キャッシュ使用率の問合せヒントが使用されない場合)、resultList問合せではキャッシュ・ヒットを取得できません。

索引は、一意である必要があります。一意でない場合、最初の索引付きオブジェクトが戻されます。

エンティティ・クラスまたは属性で@CacheIndexを使用できます。属性で定義される場合、列がデフォルトに設定されます。

例

例2-13に、@CacheIndex注釈の使用例を示します。

例2-13 @CacheIndex注釈の使用

@Entity
@CacheIndex(columnNames={"F_NAME", "L_NAME"}, updateable=true)
public class Employee {
@Id
private long id;
@CacheIndex
private String ssn;
@Column(name="F_NAME")
private String firstName;
@Column(name="L_NAME")
private String lastName;
}

例2-14に、eclipselink-orm.xmlファイルの<cache-index> XML要素の使用例を示します。

例2-14 <cache-index> XMLの使用

<?xml version="1.0"?>
<entity-mappings
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/orm http://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_4.xsd"
version="2.4">
<entity name="Employee" class="org.acme.Employee" access="FIELD">
<cache-index updateable="true">
<column-name>F_NAME</column-name>
<column-name>L_NAME</column-name>
</cache-index>
<attributes>
<id name="id"/>
<basic name="ssn">
<cache-index/>
</basic>
<basic name="firstName">
<column name="F_NAME"/>
</basic>
<basic name="lastName">
<column name="L_NAME"/>
</basic>
</attributes>
</entity>
</entity-mappings>

例2-15に、キャッシュ索引を使用する問合せの例を示します。

例2-15 索引問合せのキャッシング

Query query = em.createQuery("Select e from Employee e where e.firstName = :firstName and e.lastName = :lastName");
query.setParameter("firstName", "Bob");
query.setParameter("lastName", "Smith");
Employee employee = (Employee)query.getSingleResult();

関連項目

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

- 「@Cache」

- EclipseLinkの理解のキャッシュ索引に関する項

@CacheIndexes

@CacheIndexesを使用して、エンティティに一連の@CacheIndexを定義します。

注釈要素

表2-6は、この注釈の要素を示しています。

表 2-6 @CacheIndexesの注釈要素

注釈要素

説明

デフォルト

CacheIndex[]

キャッシュ索引の配列

例

@CacheIndexes注釈の使用例は、「@CacheIndex」を参照してください。

関連項目

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

- 「@CacheIndex」

- EclipseLinkの理解のキャッシュ索引に関する項

@CacheInterceptor

エンティティで@CacheInterceptorを使用して、イベントを通じてキャッシュ操作に応答するかわりに、エンティティに対するすべてのEclipseLinkのキャッシュ・アクセスをインターセプトします。

注釈要素

表2-7は、この注釈の要素を示しています。

表2-7 @CacheInterceptorの注釈要素

注釈要素

説明

デフォルト

value

EclipseLinkのキャッシュ・アクセスのインターセプトに使用されるクラス

使用方法

一度設定すると、指定されたクラスがすべてのキャッシュ・コールを受信します。既存のEclipseLinkのキャッシュ設定は引き続き使用され、EclipseLinkキャッシュに対して継続できるすべてのコールは構成されたキャッシュに対して実行されます。

継承でエンティティとともに使用する場合、継承階層のルートに@CacheInterceptorを定義する必要があります。

例

例2-16に、外部キャッシュをEclipseLinkと統合する方法を示します。

例2-16 Using @CacheInterceptor注釈の使用

この例では、Employeeクラスが、EclipseLinkの内部キャッシュに対するすべてのEclipseLinkコールをインターセプトし、Oracle Coherence Gridのキャッシュ(CoherenceInterceptor)にリダイレクトします。

import oracle.eclipselink.coherence.integrated.cache.CoherenceInterceptor;
import org.eclipse.persistence.annotations.Customizer;

@Entity
@CacheInterceptor(value = CoherenceInterceptor.class)
public class Employee {
...
}

例2-17に、eclipselink-orm.xmlファイルの<cache-interceptor> XML要素の使用例を示します。

例2-17 <cache-interceptor> XMLの使用

<entity class="Employee">
<cache-interceptor class="CoherenceInterceptor"/>
...
</entity>

関連項目

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

- EclipseLinkの理解

- Oracle Coherence Oracle ToplinkおよびCoherence Grid統合ガイド

- 「@Cache」

@CascadeOnDelete

@CascadeOnDelete注釈を使用して、データベース・オブジェクトで実行される削除操作をセカンダリ表または関連表にカスケードするように指定します。

ON DELETE CASCADEは、データベースの外部キーの制約オプションで、依存行を自動的に削除します。

注釈要素

この注釈の要素はありません。

使用方法

ターゲットがソース・エンティティに対する外部キーとして定義されているすべてのリレーションシップに@CascadeOnDeleteを置くことができます。

次のソース・リレーションシップに注釈を追加します。@OneToOne、@OneToMany、@ManyToManyおよび@ElementCollection。また、@SecondaryTableまたはJOINED継承のあるエンティティに@CascadeOnDeleteを追加することもできます。表2-8では、次の異なる要素に@CascadeOnDeleteを置くことによって、どのような影響があるかについて説明します。

表2-8 異なる要素での@Cascadeの使用

要素

@CascadeOnDeleteの影響

エンティティ

セカンダリ表または結合された継承表がデータベースに削除をカスケードすることを定義します。

OneToOneマッピング

関連オブジェクトの削除は、データベースにカスケードされます。

このことは、mappedBy/ターゲット外部キーのOneToOneマッピングにのみ許可されます(制約方向のため)。

OneToManyマッピング

mappedByまたはJoinColumnを使用するOneToManyでは、関連オブジェクトの削除がデータベースにカスケードされます。

JoinTableを使用するOneToManyでは、結合表の削除がデータベースにカスケードされます(制約方向により、プライベートでも、ターゲット・オブジェクトはカスケードできません)。

ManyToManyマッピング

結合表の削除がデータベースにカスケードされます(制約方向により、プライベートでもターゲット・オブジェクトはカスケードできません)。

ElementCollectionマッピング

コレクション表の削除が、データベースにカスケードされます。

@CascadeOnDeleteには、次の動作があります。

- DDL生成: DDL生成を使用して生成された制約には、カスケード削除オプションが含められます。

- エンティティ: セカンダリ表または結合された継承表からの削除では、SQLは実行されません(制約によって削除が処理されるため)。

- OneToOne: マッピングでカスケードまたはorphanRemovalが使用される場合、ターゲット・オブジェクトを削除するためのSQLは実行されません。

- OneToMany: マッピングでカスケードまたはorphanRemovalが使用される場合、ターゲット・オブジェクトを削除するためのSQLは実行されません。

- ManyToMany: 結合表から削除するためのSQLは実行されません。

- ElementCollection: コレクション表から削除するためのSQLは実行されません。

- キャッシュ: カスケードされたオブジェクトが、キャッシュまたは永続性コンテキストから削除されます。

- バージョン・ロック: カスケードされたオブジェクトの削除時に、バージョンは確認されません。

- イベント: オブジェクトがロードされていない場合、カスケードされたオブジェクトで削除イベントが実行されないことがあります。

- カスケード: CascadeOnDeleteを使用する場合、マッピングでカスケードするように削除操作を構成する必要があります。

例

例2-18に、従業員のセカンダリ表およびすべての所有されたリレーションシップのカスケード削除を示します。

例2-18 @CascadeOnDelete注釈の使用

@Entity
@SecondaryTable(name="EMP_SALARY")
@CascadeOnDelete
public class Employee{
@Id
private long id;
private String firstName;
private String lastName;
@Column(table="EMP_SALARY")
private String salary;
@OneToOne(mappedBy="owner", orphanRemoval=true, cascade={CascadeType.ALL})
@CascadeOnDelete
private Address address;
@OneToMany(mappedBy="owner", orphanRemoval=true, cascade={CascadeType.ALL})
@CascadeOnDelete
private List<Phone> phones;
@ManyToMany
@JoinTable(name="EMP_PROJ")
@CascadeOnDelete
private List<Project> projects;
...
}

eclipselink-orm.xmlディスクリプタ・ファイルで、例2-19に示すとおり削除時のカスケードを指定します。

例2-19 <cascade-on-delete> XMLの使用

...
<cascade-on-delete>true</cascade-on-delete>
...

関連項目

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

- EclipseLinkソリューション・ガイドのパフォーマンスの拡張に関する項

@ChangeTracking

@ChangeTrackingを使用して、org.eclipse.persistence.descriptors.changetracking.ObjectChangePolicyを指定します。このポリシーでは、EclipseLinkのコミット処理の変更セットを計算し、変更される属性が1つ以上ある変更セットの計算にオブジェクトを含めることによって、トランザクションを最適化します。

注釈要素

表2-9は、この注釈の要素を示しています。

表2-9 @ChangeTrackingの注釈要素

注釈要素

説明

デフォルト

ChangeTrackingType

(オプション)使用する変更追跡ポリシーは、次のとおりです。

- ATTRIBUTE: オブジェクトのsetメソッドをウィービングして、変更が行われるときに変更を収集するための変更イベントを発生させます。
ウィービングの使用、およびLAZYコレクション・リレーションシップ、または即時ウィービングが必要です。

- OBJECT: オブジェクトのsetメソッドをウィービングして、オブジェクトをダーティとしてマークします。ダーティ・オブジェクトは、コミットまたはフラッシュ操作において、変更の元の状態のコピーと比較されます。
ウィービングの使用、およびLAZYコレクション・リレーションシップ、または即時ウィービングが必要です。

- DEFERRED: 管理されているすべてのオブジェクトは、コミットまたはフラッシュにおいて、変更の元の状態のコピーと比較されます。
ウィービングは必要ありません。

- AUTO: 変更追跡ポリシーを設定しません。変更追跡は、実行時に決定されます。

AUTO

使用方法

自動ポリシーを使用すると問題があるアプリケーションの場合は、この注釈を使用して、別の変更ポリシーを構成します。@ChangeTrackingを使用すると、いくつかの属性を持つオブジェクトや多数の変更された属性を持つオブジェクトのコミット・パフォーマンスが向上することがあります。

注意:
ATTRIBUTEまたはOBJECTとともに変更追跡を使用する場合に、リフレクションを介してオブジェクトのフィールドを変更すると、EclipseLinkによって変更が検出されなくなります。ただし、DEFERREDを使用すると、EclipseLinkによって変更が検出されます。

例

例2-20に、@ChangeTrackingを使用して、作業ユニットの変更ポリシーを設定する方法を示します。

例2-20 @ChangeTracking注釈の使用

@ChangeTracking(DEFERRED)
@Entity
public class Employee {
...
}

例2-21に、eclipselink-orm.xmlファイルの<change-tracking>要素を使用する方法を示します。

例2-21 <change-tracking> XMLの使用

<entity class="Employee"
<change-tracking type="DEFERRED"/>
...
</entity>

例2-22に、永続性ユニットのpersistence.xmlファイルで、またはpropertyマップをインポートすることによって、変更追跡を構成する方法を示します。

例2-22 persistence.xmlでの変更追跡の指定

persistence.xmlファイルを使用する場合:

<property name="eclipselink.weaving.changetracking" value="false"/>

propertyマップを使用する場合:

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.WEAVING_CHANGE_TRACKING, "false");

関連項目

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

- 「weaving」

- EclipseLinkソリューション・ガイドのパフォーマンスの拡張に関する項

@ClassExtractor

@ClassExtractorを使用して、識別子列を提供するかわりに、カスタム・クラス・インジケータを定義します。

注釈要素

表2-10は、この注釈の要素を示しています。

表2-10 @ClassExtractorの注釈要素

注釈要素

説明

デフォルト

java.lang.Class

(必須)エンティティのディスクリプタに適用するクラス・エクストラクタの名前

使用方法

既存のデータベースにマップしており、表に識別子列がない場合、@ClassExtractor注釈または<class-extractor>要素を使用して継承を定義できます。クラス・エクストラクタは、ClassExtractorインタフェースを実装するクラスを取得します。このクラスのインスタンスは、データベース行に使用するクラス・タイプの決定に使用されます。クラス・エクストラクタは、データベースRecordおよびSessionを取得するextractClassFromRowメソッドを定義する必要があります。

クラス・エクストラクタがSINGLE_TABLE継承とともに使用される場合、問合せでクラス・タイプの行をフィルタリングできる必要があります。これは、ブランチ・クラスのonlyInstancesExpressionまたはwithAllSubclassesExpressionを設定することによって実現できます。これらは、DescriptorCustomizerを使用してExpressionオブジェクトに設定できます。

例

例2-23に、ClassExtractorを使用して継承を定義する例を示します。

例2-23 @ClassExtractor注釈の使用

@Entity
@Table(name="MILES_ACCOUNT")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@ClassExtractor(AirMilesClassExtractor.class)
@Customizer(AirMilesCustomizer.class)
public class AirMilesAccount implements Serializable {
@Id
private Long id;
@Basic
private String totalMiles;
@Basic
private String milesBalance;
...
}

@Entity
@Customizer(PreferredCustomizer.class)
public class PreferredAccount extends AirMilesAccount {
...
}

public class AirMilesClassExtractor implements ClassExtractor {
public void extractClassFromRow(Record row, Session session) {
if (row.get("TOTALMILES").lessThan(100000)) {
return AirMilesAccount.class;
} else {
return PreferredAccount.class;
}
}
}

public class AirMilesCustomizer implements DescriptorCustomizer {
public void customize(ClassDescriptor descriptor) {
ExpressionBuilder account = new ExpressionBuilder();
Expression expression = account.getField("TOTALMILES").lessThan(100000);
descriptor.getInheritancePolicy().setOnlyInstancesExpression(expression);
}
}

public class PreferredCustomizer implements DescriptorCustomizer {
public void customize(ClassDescriptor descriptor) {
ExpressionBuilder account = new ExpressionBuilder();
Expression expression = account.getField("TOTALMILES").greaterThanEqual(100000);
descriptor.getInheritancePolicy().setOnlyInstancesExpression(expression);
}
}

例2-24に、eclipselink-orm.xmlファイルの<class-extractor>要素を使用する方法を示します。

例2-24 <class-extractor> XMLの使用

<entity class="AirMilesAccount">
<table name="MILES_ACCOUNT"/>
<inheritance strategy="SINGLE_TABLE"/>
<class-extractor class="AirMilesClassExtractor"/>
...
</entity>

<entity class="PreferredAccount">
<customizer class="PreferredCustomizer"/>
...
</entity>

関連項目

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

- EclipseLinkの理解のエンティティに関する項

- 「@Customizer」

@CloneCopyPolicy

@CloneCopyPolicyを使用して、エンティティにorg.eclipse.persistence.descriptors.copying.CloneCopyPolicyを指定します。

注釈要素

表2-11は、この注釈の要素を示しています。

表2-11 @CloneCopyPolicyの注釈要素

注釈要素

説明

デフォルト

method

(オプション) methodは、EclipseLinkのDeferredChangeDetectionPolicyと比較するクローンの作成に使用されます

workingCopyMethod

(オプション) workingCopyoMethodは、EclipseLinkのUnitOfWorkにオブジェクトを登録するときに使用されるクローンの作成に使用されます

注意:
methodまたはworkingCopyMenthodのいずれかを指定する必要があります。

使用方法

クローンmethodでは、オブジェクトのシャロー・クローンを実行します。これは、共有キャッシュ内のインスタンスから非永続フィールドをクローニングするために使用できます。

@CloneCopyPolicyは、エンティティ、MappedSuperclassまたは埋込み可能クラスに指定できます。

例

例2-25および例2-26に、@CloneCopyPolicy注釈および<clone-copy-policy> XML要素の様々な例をそれぞれ示します。

例2-25 @CloneCopyPolicy注釈の使用

@CloneCopyPolicy(method="myClone")

@CloneCopyPolicy(method="myClone", workingCopyMethod="myWorkingCopyClone")

@CloneCopyPolicy(workingCopyMethod="myWorkingCopyClone")

例2-26 <clone-copy-policy> XMLの使用

<clone-copy-policy type="copy" method="myClone" workingCopyMethod="myWorkingCopyClone"/>

<clone-copy-policy type="copy" workingCopyMethod="myWorkingCopyClone"/>

<clone-copy-policy type="copy" method="myClone"/>

関連項目

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

- EclipseLinkの理解

- 「@CopyPolicy」

- 「@InstantiationCopyPolicy」

@CompositeMember

@CompositeMemberを使用して、クラスがコンポジット永続性ユニットに属すことを示します。

ターゲット・タイプがプリミティブ型であり、かつ、ソース・コンポジット・メンバー永続性ユニット以外のコンポジット・メンバー永続性ユニットに属する表が@CollectionTableによって指定される場合に使用します。これにより、ソースおよびターゲットを様々なデータベースにマップできます。

注釈要素

表2-12は、この注釈の要素を示しています。

表2-12 @CompositeMemberの注釈要素

注釈要素

説明

デフォルト

value

要素表が属するターゲット・コンポジット・メンバー永続性ユニットの名前(ソース・コンポジット・メンバー永続性ユニットと異なる場合)

使用方法

@CompositeMember注釈は、コンポジット・メンバー永続性ユニットにない場合は無視されます。@ElementCollection注釈および@CollectionTable注釈とともに使用される場合があります。

例

次の例に示すとおり、注釈またはeclipselink-orm.xmlファイルを使用してCompositeMemberを構成できます。

例2-27 @CompositeMember注釈の使用

@ElementCollection()
@CollectionTable(name = "MBR1_RESPONS", joinColumns=@JoinColumn(name="EMP_ID"))
@CompositeMember("branch-database")
@Column(name = "DESCRIPTION")
public Collection<String> getResponsibilities() {
return responsibilities;
}

例2-28 <composite-member> XMLの使用

<element-collection name="responsibilities" composite-member="branch-database">
<column name="DESCRIPTION"/>
<collection-table name="XML_MBR3_RESPONS">
<join-column name="EMP_ID"/>
</collection-table>
</element-collection>

関連項目

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

- EclipseLinkソリューション・ガイドの複数のデータベースとコンポジット永続性ユニットの使用に関する項

- 「composite-unit」

- 「composite-unit.member」

@ConversionValue

@ConversionValueを使用して、ObjectTypeConverterのデータベース値およびオブジェクト値を指定します。

注釈要素

表2-13は、この注釈の要素を示しています。

表2-13 @ConversionValueの注釈要素

注釈要素

説明

デフォルト

dataValue

(必須)データベース値

objectValue

(必須)オブジェクト値

使用方法

JPA仕様により、データベース値がEnumの名前または序数値のいずれかである場合、@Enumerated注釈を使用してEnumをデータベース列にマップできます。EclipseLinkでは、コンバータを使用してEnumをコード化された値にマップすることもできます。

例

例2-29では、enum Gender(MALE, FEMALE)がデータベースの単一文字(M=MALEおよびF=FEMALE)にマップされます。

例2-29 @ConversionValue注釈の使用

@ObjectTypeConverter(name = "gender", objectType = Gender.class, dataType = String.class, conversionValues = {
@ConversionValue(objectValue = "Male", dataValue = "M"),
@ConversionValue(objectValue = "Female", dataValue = "F") })

...

@Basic
@Convert("gender")
private Gender gender = Gender.Male;

例2-30では、XMLを使用する同じ機能を示します。

例2-30 <conversion-value> XMLの使用

<object-type-converter name="gender" object-type="model.Gender "data-type="java.lang.String">
<conversion-value object-value="Male" data-value="M" />
<conversion-value object-value="Female" data-value="F" />
</object-type-converter>

...

<basic name="gender">
<column name="GENDER" />
<convert>gender</convert>
</basic>

関連項目

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

- 「@ObjectTypeConverter」

- EclipseLinkの理解

@Convert

@Convertを使用して、名前付きコンバータを対応するマップ済属性とともに使用する必要があることを指定します。

注釈要素

表2-14は、この注釈の要素を示しています。

表2-14 @Convertの注釈要素

注釈要素

説明

デフォルト

value

(オプション)コンバータのStringの名前

none

使用方法

@Convertには、次の予約名があります。

- serialized: 関連付けられたマッピングにorg.eclipse.persistence.mappings.converters.SerializedObjectConverterを配置します。

- class-instance: 関連付けられたマッピングでClassInstanceConverterを使用します。ClassInstanceConverterを使用する場合、データベース表現はクラス名を表すStringになり、オブジェクト・モデル表現は引数なしのコンストラクタで構築されたクラスのインスタンスになります。

- none: 関連付けられたマッピングにコンバータを配置しません。

例

例2-31に、@Convert注釈を使用してgenderフィールドを定義する方法を示します。

例2-31 @Convert注釈の使用

@Entity
@Table(name="EMPLOYEE")
@Converter(
name="genderConverter",
converterClass=org.myorg.converters.GenderConverter.class
)
public class Employee implements Serializable{
...
@Basic
@Convert("genderConverter")
public String getGender() {
return gender;
}
...
}

関連項目

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

- 「@Converter」

- 「@ObjectTypeConverter」

- 「@TypeConverter」

- EclipseLinkの理解

@Converter

@Converter注釈を使用して、マップ済属性の読取りおよび書込み中にデータ値を変更するための、カスタム・コンバータを指定します。

注釈要素

表2-15は、この注釈の要素を示しています。

表2-15 @Converterの注釈要素

注釈要素

説明

デフォルト

name

コンバータのStringの名前。永続性ユニットで一意である必要があります。

なし

converterClass

コンバータのクラス。このクラスは、org.eclipse.persistence.mappings.converters.Converterインタフェースを実装する必要があります。

なし

使用方法

@Converterを使用して、マッピングとともに使用できる名前付きコンバータを定義します。コンバータは、エンティティ・クラス、メソッドまたはフィールドに定義できます。基本またはElementCollectionマッピングで@Convert注釈を使用してコンバータを指定します。

非JPAコンバータ注釈の使用

EclipseLinkは、(JPAのデフォルト・タイプ・マッピングに加えて)次の一連の非JPAコンバータ注釈を提供します。

- @Converter

- @TypeConverter

- @ObjectTypeConverter

- @StructConverter

- @Convert

永続性プロバイダは、次の順序でコンバータ注釈を検索します。

1. @Convert

2. @Enumerated

3. @Lob

4. @Temporal

5. シリアライズ(自動)

次のクラスでコンバータを指定します。

- @Entity

- @MappedSuperclass

- @Embeddable

次のマッピングとともにコンバータを使用します。

- @Basic

- @Id

- @Version

- @ElementCollection

コンバータがその他のタイプのマッピング注釈によって指定されている場合、例外がスローされます。

例

例2-32に、@Converter注釈を使用してgenderフィールドのコンバータ・クラスを指定する方法を示します。

例2-32 @Converter注釈の使用

@Entity
public class Employee implements Serializable{
...
@Basic
@Converter (
name="genderConverter",
converterClass=org.myorg.converters.GenderConverter.class
)
@Convert("genderConverter")
public String getGender() {
return gender;
}
...
}

例2-33に、eclipselink-orm.xmlファイルの<converter>要素を使用する方法を示します。

例2-33 <converter> XMLの使用

<entity class="Employee">
...
<attributes>
...
<basic name="gender">
<convert>genderConverter</convert>
<converter name="genderConverter" class="org.myorg.converters.GenderConverter"/>
</basic>
...
</attributes>
</entity>

関連項目

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

- 「@Converters」

- 「@Convert」

- 「@MapKeyConvert」

- EclipseLinkの理解

@Converters

@Converters注釈を使用して、複数の@Converter要素を定義します。

注釈要素

表2-16は、この注釈の要素を示しています。

表2-16 @Convertersの注釈要素

注釈要素

説明

デフォルト

Converter[]

(必須)コンバータの配列

例

この注釈の例は、「@Converter」を参照してください。

関連項目

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

- 「@Converter」

- EclipseLinkの理解

@CopyPolicy

@CopyPolicyを使用して、エンティティにorg.eclipse.persistence.descriptors.copying.CopyPolicyを設定し、永続性要素のコピーを作成します。

注釈要素

表2-17は、この注釈の要素を示しています。

表2-17 @CopyPolicyの注釈要素

注釈要素

説明

デフォルト

java.lang.Class

(必須)コピー・ポリシーのクラス。クラスは、org.eclipse.persistence.descriptors.copying.CopyPolicyを実装する必要があります。

使用方法

@CopyPolicyは、エンティティ、MappedSuperclassまたは埋込み可能クラスに指定できます。

例

例2-34に、この注釈を使用する方法を示します。

例2-34 @CopyPolicy注釈の使用

@Entity
@Table(name="EMPLOYEE")
@CopyPolicy(mypackage.MyCopyPolicy.class)
public class Employee implements Serializable {
...
}

例2-35に、eclipselink-orm.xmlファイルの<copy-policy>要素を使用する方法を示します。

例2-35 <copy-policy> XMLの使用

<entity class="Employee">
<table name="EMPLOYEE"/>
<copy-policy class="mypackage.MyCopyPolicy"/>
...
</entity>

関連項目

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

- 「@CloneCopyPolicy」

- 「@InstantiationCopyPolicy」

- EclipseLinkの理解

@Customizer

@Customizerを使用して、org.eclipse.persistence.config.DescriptorCustomizerを実装し、すべてのメタデータ処理が完了した後にエンティティのクラス・ディスクリプタに対して実行するクラスを指定します。

注釈要素

表2-18は、この注釈の要素を示しています。

表2-18 @Customizerの注釈要素

注釈要素

説明

デフォルト

java.lang.Class

(必須)エンティティのディスクリプタに適用するディスクリプタ・カスタマイザの名前

使用方法

この注釈を使用して、EclipseLinkネイティブAPIによってマッピング・メタデータをカスタマイズまたは拡張します。@Customizerを使用すると、その他のEclipseLink機能および構成にアクセスできます。

@Customizerは、エンティティ、MappedSuperclassまたは埋込み可能クラスに指定できます。

注意:
@Customizerは、親クラスから継承されません。

例

例2-36に、次のDescriptorCustomerとともに@Customizer注釈を使用する方法を示します。

public class MyCustomizer implements DescriptorCustomizer {
public void customize(ClassDescriptor descriptor) {
DirectToFieldMapping genderMapping = (DirectToFieldMapping)descriptor.getMappingForAttributeName("gender");
ObjectTypeConverter converter = new ObjectTypeConverter();
convert.addConversionValue("M", Gender.MALE);
convert.addConversionValue("F", Gender.FEMALE);
genderMapping.setConverter(converter);
}
}

例2-36 @Customizer注釈の使用

@Entity
@Table(name="EMPLOYEE")
@Customizer(mypackage.MyCustomizer.class)
public class Employee implements Serializable {
...
}

例2-37に、eclipselink-orm.xmlファイルの<customizer>要素を使用する方法を示します。

例2-37 <customizer> XMLの使用

<entity class="Employee">
<table name="EMPLOYEE"/>
<customizer class="mypackage.MyCustomizer"/>
...
</entity>

関連項目

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

- 「descriptor.customizer」

- EclipseLinkソリューション・ガイドのJPAエンティティのXMLへのバインドに関する項

@DeleteAll

@DeleteAllを使用して、リレーションシップを削除するときに、EclipseLinkがすべて削除問合せを使用する必要があることを示します。このことは、通常、リレーションシップがPrivateOwnedのであり、その所有者が削除されている場合に発生します。その場合、リレーションシップのメンバーは読み込まれることなく削除されます。

注釈要素

この注釈の要素はありません。

使用方法

警告:

この注釈の使用には注意が必要です。EclipseLinkでは、すべて削除が機能するようにターゲット・エンティティがマップされているかどうかを確認しません。

例

例2-38に、リレーションシップ・マッピングで@DeleteAllを使用する方法を示します。

例2-38 @DeleteAll注釈の使用

@Entity
public class Department {
...
@OneToMany(mappedBy = "department")
@PrivateOwned
@DeleteAll
public List<Equipment> getEquipment() {
return equipment;
}
...
}

例2-38に、eclipselink-orm.xmlファイルの<delete-all>要素を使用する方法を示します。

例2-39 <delete-all> XMLの使用

<entity class="Department">
...
<attributes>
<one-to-many name="equipment" target-entity="Equipment" mapped-by="department">
<private-owned/>
<delete-all/>
</one-to-many>
...
</attributes>
</entity>

関連項目

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

- 「@PrivateOwned」

@DiscriminatorClass

@DiscriminatorClassを@VariableOneToOne注釈とともに使用して、マッピングのタイプのリストに追加されるエンティティを決定します。

注釈要素

表2-19は、この注釈の要素を示しています。

表2-19 @DiscriminatorClassの注釈要素

注釈要素

説明

デフォルト

discriminator

(必須)データベースに格納される識別子

value

(必須)discriminatorを使用してインスタンス化されるクラス

使用方法

@DiscriminatorClass注釈は、@VariableOneToOneマッピング内でのみ指定できます。

例

@DiscriminatorClassを使用した可変1対1マッピングの例は、「@VariableOneToOne」を参照してください。

関連項目

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

- 「@VariableOneToOne」

- EclipseLinkの理解

@ExcludeDefaultMappings

@ExcludeDefaultMappingsを使用して、特定のクラスにデフォルト・マッピングを追加しないことを指定します。かわりに、EclipseLinkは、注釈またはXMLマッピング・ファイルによって明示的に定義されているマッピングのみを使用します。

注釈要素

この注釈の要素はありません。

使用方法

@ExcludeDefaultMappingsは、エンティティ、MappedSuperclassまたは埋込み可能クラスに指定できます。

例

例2-40に、@ExcludeDefaultMapping注釈を使用する方法を示します。

例2-40 @ExcludeDefaultMappings注釈の使用

@ExcludeDefaultMappings
@Entity
public class Dealer {
@Id
private long id;
@Basic
private String name;
// These would be ignored
private List<Card> deck;
private List<Card> hand;
...
}

関連項目

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

- EclipseLinkの理解のEclipseLinkプロジェクトのビルディング・ブロックに関する項

@ExistenceChecking

@ExistenceCheckingを使用して、エンティティが新しいか、または存在するかをEclipseLinkがどのような方法で確認するかを指定します。

merge()操作では、@ExistenceCheckingを使用して、オブジェクトが存在するかどうか、つまり、オブジェクトを(データベースまたはキャッシュから)読み取る必要があるかどうかを決定するために、EclipseLinkがキャッシュのみを使用するかどうかを指定します。デフォルトでは、オブジェクトはデータベースから読み取られます。

注釈要素

表2-20は、この注釈の要素を示しています。

表2-20 @ExistenceCheckingの注釈要素

注釈要素

説明

デフォルト

ExistenceType

(オプション)次の存在チェック・タイプを設定します。

- ASSUME_EXISTENCE

- ASSUME_NON_EXISTENCE

- CHECK_CHACHE

- CHECK_DATABASE

CHECK_CACHE

使用方法

@ExistenceCheckingは、エンティティまたはMappedSuperclassに指定できます。

EclipseLinkでは、次の存在チェック・タイプがサポートされています。

- ASSUME_EXISTENCE: オブジェクトの主キーにnullが含まれていない場合、その主キーが存在する必要があります。アプリケーションが存在チェックを保証する場合または存在チェックを考慮しない場合に、このオプションを使用できます。

- ASSUME_NON_EXISTENCE: オブジェクトは存在しないと想定します。アプリケーションが存在チェックを保証する場合または存在チェックを考慮しない場合に、このオプションを使用できます。常にINSERT操作が強制されます。

- CHECK_CHACHE: オブジェクトの主キーにnullが含まれておらず、キャッシュに含まれている場合、その主キーが存在する必要があります。

- CHECK_DATABASE: データベースでSELECTを実行します。

例

例2-41に、この注釈を使用する方法を示します。

例2-41 @ExistenceChecking注釈の使用

@Entity
@Cache(type=CacheType.HARD_WEAK,  expiryTimeOfDay=@TimeOfDay(hour=1))
@ExistenceChecking(ExistenceType.CHECK_DATABASE)
public  class  Employee  implements  Serializable  {
...
}

関連項目

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

- 「@Cache」

- EclipseLinkソリューション・ガイドのパフォーマンスの拡張に関する項

@FetchAttribute

@FetchAttributeを使用して、フェッチ・グループ内のパフォーマンスを向上させます。オブジェクトの属性のグループをオンデマンドでロードできるようにします。その結果、明示的なアクセス・コールが発生するまで、属性のデータをデータソースからロードする必要がなくなります。

これにより、ユーザーが一部の属性のみを必要とする場合に、オブジェクトの属性のすべてのデータをロードする必要がなくなります。

注釈要素

表2-21は、この注釈の要素を示しています。

表2-21 @FetchAttributeの注釈要素

注釈要素

説明

デフォルト

name

(必須)フェッチ属性の名前

使用方法

EclipseLinkには、次の2つのタイプのフェッチ・グループがあります。

- エンティティまたはMappedSuperclassレベルの事前定義済フェッチ・グループ

- 問合せレベルの動的(ユースケース)フェッチ・グループ

フェッチ・グループを使用する場合、広範囲にわたってユースケースを確認する必要があります。多くの事例では、追加のラウンドトリップにより、遅延したロードによって得られるメリットが相殺されます。

例

例2-42に、@FetchGroup注釈内で@FetchAttributeを使用する方法を示します。

例2-42 @FetchAttribute注釈の使用

@Entity
@FetchGroup(name="basic-fetch-group", attributes={
@FetchAttribute(name="id"),
@FetchAttribute(name="name"),
@FetchAttribute(name="address")})
public class Person {

@Id
private int id;

private String name;

@OneToOne(fetch=LAZY)
private Address address;

@ManyToOne(fetch=EAGER)
private ContactInfo contactInfo;

例2-43 <fetch-group> XMLの使用

<fetch-group name="basic-fetch-group">
<attribute name="id"/>
<attribute name="name"/>
<attribute name="address"/>
</fetch-group>

関連項目

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

- EclipseLinkの理解

- 「@FetchGroup」

@FetchGroup

@FetchGroupを使用して、必要に応じて属性のグループをオンデマンドでロードします。

これにより、ユーザーがオブジェクトの属性の一部のみを必要とする場合に、そのすべてのデータをロードする無駄を回避できます。属性に対して明示的なアクセス・コールが最初に発生するまで、基礎となるデータ・ソースから属性のデータをロードする必要がなくなることも意味します。

注釈要素

表2-22は、この注釈の要素を示しています。

表2-22 @FetchGroupの注釈要素

注釈要素

説明

デフォルト

FetchAttribute[] attributes

(必須)フェッチする属性のリスト

なし

java.lang.String name

(必須)フェッチ・グループ名

なし

boolean load

(オプション)フェッチ・グループで指定されたすべてのリレーションシップ属性をロードする必要があるかどうかを示します。

false

使用方法

@FetchGroupを使用する場合は、ユースケース分析を入念に実行する必要があります。遅延したロードによって得られるメリットは、追加のラウンドトリップによって相殺される場合があります。

EclipseLinkでは、次の2つのレベルのフェッチ・グループがサポートされています。

- エンティティまたはMappedSuperclassレベルの事前定義済フェッチ・グループ

- 問合せレベルの動的(ユースケース)フェッチ・グループ

ウィービングを使用する場合、またはフェッチ・グループを定義する個々のクラスがorg.eclipse.persistence.queries.FetchGroupTrackerインタフェースを明示的に実装する場合にのみ、フェッチ・グループを使用できます。

フェッチ・グループを使用すると、オブジェクトの属性のサブセットを定義したり、フェッチ・グループを問合せに関連付けることができます。問合せを実行すると、EclipseLinkによりフェッチ・グループ内の属性のみが取得されます。除外された属性のいずれかに関するgetメソッドをコールすると、EclipseLinkでは、このサブセットから除外されたすべての属性をフェッチする問合せが自動的に実行されます。

1つのクラスに対して、複数のフェッチ・グループを定義できます。オプションで、その中で最大で1つのフェッチ・グループをデフォルト・フェッチ・グループとして指定できます。フェッチ・グループを指定しないで問合せを実行すると、EclipseLinkでは、その他に問合せが構成されていないかぎり、デフォルト・フェッチ・グループを使用します。

フェッチ・グループを使用する前に、システムの使用状況を綿密に分析しておくことをお薦めします。多くの事例では、フェッチ・グループに含まれない属性をロードするために必要な追加の問合せにより、部分的な属性のロードによって得られるメリットがかなり相殺されているためです。

例

例2-44に、この注釈を使用する方法を示します。

例2-44 Using @FetchGroup注釈の使用

@FetchGroup(name="names", attributes={
@FetchAttribute(name="firstName"),
@FetchAttribute(name="lastName")})

例2-45に、eclipselink-orm.xmlファイルでこの機能を使用する方法を示します。

例2-45 <fetch-group> XMLの使用

<entity class="model.Employee">
<secondary-table name="SALARY" />
<fetch-group name="names">
<attribute name="firstName" />
<attribute name="lastName" />
</fetch-group>
...

例2-46に示すとおり、名前付きフェッチ・グループを問合せとともに使用することもできます。

例2-46 問合せでの名前付きフェッチ・グループの使用

TypedQuery query = em.createQuery("SELECT e FROM Employee e", Employee.class);

query.setHint(QueryHints.FETCH_GROUP_NAME, "names");

関連項目

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

- EclipseLinkの理解

- 「@FetchAttribute」

- 「@FetchGroups」

@FetchGroups

@FetchGroupsを使用して、@FetchGroupのグループを定義します。

注釈要素

表2-23は、この注釈の要素を示しています。

表2-23 @FetchGroupsの注釈要素

注釈要素

説明

デフォルト

FetchGroup

(必須)フェッチ・グループの配列(@FetchGroup)

使用方法

@FetchGroupsは、エンティティまたはMappedSuperclassに指定できます。

永続性ユニットのウィービングによって、フェッチ・グループを有効または無効にすることもできます。

例

フェッチ・グループの使用例は、「@FetchGroup」を参照してください。

例2-47に、永続性ユニットのpersistence.xmlファイルで、またはpropertyマップをインポートすることによって、フェッチ・グループを構成する方法を示します。

例2-47 persistence.xmlでのフェッチ・グループの指定

persistence.xmlファイルを使用する場合:

<property name="eclipselink.weaving.fetchgroups" value="false"/>

propertyマップを使用する場合:

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.WEAVING_FETCHGROUPS, "false");

関連項目

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

- 「@FetchGroup」

- 「@FetchAttribute」

- 「weaving」

@Field

@Fieldを使用して、NoSqlデータにマップされるオブジェクトの構造化データ型のフィールド名を定義します。

注釈要素

表2-24は、この注釈の要素を示しています。

表2-24 @Fieldの注釈要素

注釈要素

説明

デフォルト

name

(オプション)フィールドのデータ・タイプの名前

使用方法

@Field注釈は、@Column注釈の汎用形式であり、リレーショナル・データベースに固有ではありません。@Fieldを使用して、EISおよびNoSQLデータをマップできます。

例

@Field注釈の例は、「@NoSql」を参照してください。

関連項目

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

- 「@NoSql」

@HashPartitioning

@HashPartitioningを使用して、オブジェクト(オブジェクトの場所またはテナントなど)からのフィールド値のハッシュによって、データベース・クラスタへのアクセスをパーティション化します。ハッシュによって、接続プールのリストに索引が付けられます。

注釈要素

表2-25は、この注釈の要素を示しています。

表2-25 @HashPartitioningの注釈要素

注釈要素

説明

デフォルト

name

(必須)パーティション・ポリシーの名前。名前は、永続性ユニット内で一意である必要があります。

partitionColumn

(必須)問合せをパーティション化するためのデータベース列または問合せパラメータ

connectionPools

(オプション)パーティション化するための接続プール名のリスト

ServerSessionのすべての定義済プール

unionUnpartitionableQueries

(オプション)パーティション・ハッシュを含まない問合せをすべてのデータベースに送信し、結果を統合するかどうかを指定します。

False

使用方法

ハッシュ値を持つオブジェクトに対するすべての書込みまたは読取り要求は、サーバーに送信されます。パラメータとしてフィールドを含まない問合せは、次のように処理されます。

- すべてのサーバーに送信され、統合されます。
または

- セッションのデフォルトの動作に基づいて処理されます。

パーティション化は、エンティティ、リレーションシップ、問合せ、またはセッション/永続性ユニットで有効にできます。パーティション・ポリシーは、グローバルに名付けられ(再利用を可能にするため)、@Partitioned注釈を使用して設定する必要があります。

永続性ユニット・プロパティは、読取り/書込み/シーケンスの既存の構成に加えて、名前付き接続プールの追加をサポートします。名前付き接続プールは、データベース・クラスタの各ノードに対して定義される必要があります。

トランザクションによって複数のパーティションからのデータが変更される場合、JTAを使用してデータの適切な2フェーズ・コミットを確認する必要があります。1つのトランザクションに1つのノードのみが使用されるように、EntityManagerで排他接続を構成することもできます。

例

EclipseLinkを使用したパーティション化の例は、「@Partitioned」を参照してください。

関連項目

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

- 「@Partitioned」

@Index

索引は、表に対して定義されるデータベース構造であり、これにより一連の列に対する問合せと検索のパフォーマンスが向上します。eclipselink-orm.xmlディスクリプタ内のコードまたは<index>要素で@Index注釈を使用して、表に索引を作成します。

エンティティまたは属性で索引を定義できます。エンティティの場合、索引に対して一連の列を定義する必要があります。

索引の作成はデータベース固有です。一部のデータベースは索引をサポートしていない可能性があります。ほとんどのデータベースでは、主キーと外部キーの列が自動的に索引付けされます。一部のデータベースでは、高度な索引DDLオプションがサポートされています。より高度な索引DDLを作成するために、DDLスクリプトまたはネイティブ問合せを使用できます。

注釈要素

表2-26は、この注釈の要素を示しています。

表2-26 @Indexの注釈要素

注釈要素

説明

デフォルト

java.lang.String catalog

(オプション) INDEXのカタログ

デフォルトのカタログ

java.lang.String[] columnNames

(フィールド/メソッドに注釈が付けられている場合は不要)索引を定義する一連の列を指定します。

エンティティの場合は、なし。

属性の場合は、その属性の列。

java.lang.String name

(オプション) INDEXの名前

<table>_<column>_INDEX (ただし、名前を指定する必要があります)

java.lang.String schema

(オプション) INDEXのスキーマ

デフォルトのスキーマ

java.lang.String table

(オプション)索引を定義する表。デフォルトはエンティティのプライマリ表です。

エンティティのプライマリ表。

boolean unique

(オプション)索引が一意か、または非一意であるかを指定します。

false

使用方法

@Index注釈を使用して、問合せでよく使用される任意の属性または列の索引を作成します。

例

この例では、名に1つ、姓に1つ、および名と姓に複数列の索引、という3つの索引を定義します。

例2-48 @Index注釈の使用

@Entity
@Index(name="EMP_NAME_INDEX", columns={"F_NAME","L_NAME"})
public class Employee{
@Id
private long id;
@Index
@Column(name="F_NAME")
private String firstName;
@Index
@Column(name="L_NAME")
private String lastName;
...
}

次の例に示すように、<index>を使用してeclipselink-orm.xmlディスクリプタに索引を作成することもできます。<column>サブ要素を使用して列を定義します。@Index注釈でサポートされるすべての属性は、<index>要素でもサポートされます。

例2-49 <index> XMLの使用

<index name="EMP_NAME_INDEX" table="EMPLOYEE" unique="true">
<column>F_NAME</column>
<column>L_NAME</column>
</index>

関連項目

詳細は、次のドキュメントを参照してください。

- 「@Indexes」

@Indexes

@Indexesを使用して、エンティティ用のデータベース索引のセットを定義します。

注釈要素

表2-27は、この注釈の要素を示しています。

表2-27 @Indexesの注釈要素

注釈要素

説明

デフォルト

Index[]

データベース索引の配列

例

@Index注釈の使用例は、「@Index」を参照してください。

関連項目

詳細は、次のドキュメントを参照してください。

- 「@CopyPolicy」

- 「@CloneCopyPolicy」

- 「@Index」

@InstantiationCopyPolicy

@InstantiationCopyPolicyを使用して、エンティティにorg.eclipse.persistence.descriptors.copying.InstantiationCopyPolicyを設定します。

注釈要素

この注釈の要素はありません。

使用方法

コピー・ポリシーによって、EclipseLinkが共有キャッシュとの間でオブジェクトをクローニングする方法が指定されます。@InstantiationCopyPolicyによって、EclipseLinkは、オブジェクトをクローニングするために、オブジェクトの新規インスタンスを作成し、各永続属性をコピーします。代替メソッドには@CloneCopyPolicyがあり、これはオブジェクトをクローニングします。

クローニングは、新規インスタンスの作成よりも効率的で、一時属性値または非永続属性値を維持します。共有キャッシュに一時属性値または非永続属性値が必要ない場合は、@InstantiationCopyPolicyを使用します。

デフォルトのEclipseLinkコピー・ポリシーは、構成によって異なります。

- weaving.internal (およびフィールド・アクセス)を使用する場合、EclipseLinkはオブジェクトをコピーする特別なクローン・メソッドを生成します。

- ウィービングを使用しない場合、EclipseLinkはインスタンス化を使用してオブジェクトをコピーします。

@InstantiationCopyPolicyは、エンティティ、MappedSuperclassまたは埋込み可能エンティティに指定できます。

例

例2-50に、この注釈を使用する方法を示します。

例2-50 @InstantiationCopyPolicy注釈の使用

@Entity
@InstantiationCopyPolicy
public class Employee {
...
transient List events = new ArrayList();
}

例2-51に、eclipselink-orm.xmlファイルでこの拡張を使用する方法を示します。

例2-51 <instantiation-copy-policy> XMLの使用

<entity name="Employee" class="org.acme.Employee" access="FIELD">
<instantiation-copy-policy/>
...
</entity>

関連項目

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

- 「@CopyPolicy」

- 「@CloneCopyPolicy」

- 「weaving.internal」

@JoinFetch

@JoinFetch注釈を使用して、ソース・オブジェクトと同じ問合せにある関連オブジェクトの結合および読取りを有効にします。

注意:
すべての問合せで結合が必要となるわけではないため、結合フェッチは問合せレベルで設定してください。

注釈要素

表2-28は、この注釈の要素を示しています。

表2-28 @JoinFetchの注釈要素

注釈要素

説明

デフォルト

value

(オプション)この属性を、使用するフェッチのorg.eclipse.persistence.annotations.JoinFetchType列挙型に設定します。

JoinFetchTypeの有効な値は次のとおりです。

- INNER: このオプションにより、関連オブジェクトの内部結合フェッチが実現されます。
注意: 内部結合では、nullまたは空の値を使用できません。

- OUTER: このオプションにより、関連オブジェクトの外部結合フェッチが実現されます。
注意: 外部結合では、nullまたは空の値を使用できます。

JoinFetchType.INNER

使用方法

@JoinFetch注釈は、次のマッピングに指定できます。

- @OneToOne

- @OneToMany

- @ManyToOne

- @ManyToMany

- @ElementCollection

また、特にコレクション・リレーションシップには、より効率的なバッチ・フェッチを使用できます。

例

次の例では、@JoinFetch注釈を使用して、従業員フィールドmanagedEmployeesを指定する方法を示します。

例2-52 @JoinFetch注釈の使用

@Entity
public class Employee implements Serializable {
...
@OneToMany(cascade=ALL, mappedBy="owner")
@JoinFetch(value=OUTER)
public Collection<Employee> getManagedEmployees() {
return managedEmployees;
}
...
}

例2-53に、eclipselink-orm.xmlファイルでこの拡張を使用する方法を示します。

例2-53 XMLでの<join-fetch>の使用

<one-to-many name="managedEmployees">
<join-fetch>OUTER</join-fetch>
</one-to-many>

関連項目

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

- EclipseLinkの理解

- EclipseLinkソリューション・ガイドのパフォーマンスの拡張に関する項

- 「@BatchFetch」

@JoinField

@JoinFieldを使用して、NoSqlデータにマップされるオブジェクトの構造化データ型の外部キーを定義します。

注釈要素

表2-29は、この注釈の要素を示しています。

表2-29 @JoinFieldの注釈要素

注釈要素

説明

デフォルト

name

(オプション)ソース・レコード内の外部キー/ID参照フィールドの名前

referencedFieldName

(オプション)ターゲット・レコード内のIDフィールドの名前

使用方法

@JoinField注釈は、@JoinColumn注釈の汎用形式であり、リレーショナル・データベースに固有ではありません。@JoinFieldを使用して、EISおよびNoSQLデータをマップできます。

例

次の例では、注釈として、XMLでこの拡張を使用する方法を示します。

例2-54 @JoinField注釈

@Entity
@NoSql
public class Order {
...
@ManyToOne
@JoinField(name="customerId")
private Customer customer;
}

例2-55 XMLでの<join-field>の使用

<entity name="Order" class="org.acme.Order">
<no-sql/>
...
<many-to-one name="customer">
<join-field name="customerId"/>
</many-to-one>
</entity>

関連項目

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

- 「@JoinFields」

@JoinFields

@JoinFieldsを使用して、リレーションシップに一連の@JoinField注釈を定義します。

注釈要素

表2-30は、この注釈の要素を示しています。

表2-30 @JoinFieldsの注釈要素

注釈要素

説明

デフォルト

JoinField[]J

結合フィールドの配列

例

@Index注釈の使用例は、「@JoinField」を参照してください。

関連項目

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

- 「@JoinField」

@MapKeyConvert

@MapKeyConvertを使用して、対応するマップ済属性のキー列とともに使用される名前付きコンバータを指定します。

注釈要素

表2-31は、この注釈の要素を示しています。

表2-31 @MapKeyConvertの注釈要素

注釈要素

説明

デフォルト

value

(オプション)使用するコンバータの名前

- serialized

- class-instance

- none

- カスタム・コンバータ

なし

使用方法

@MapKeyConvertを使用して、@MapKeyColumnで使用されるキー値を変換し、データベース列とは異なる型または値を持つようにします。

@MapKeyConvert注釈には、次の予約名があります。

- serialized: 関連付けられたマッピングでSerializedObjectConverterを使用します。SerializedObjectConverterを使用する場合、データベース表現はオブジェクトのシリアライズされたバージョンを保持するバイナリ・フィールドになり、オブジェクト・モデル表現は実際のオブジェクトになります。

- class-instance: 関連付けられたマッピングでClassInstanceConverterを使用します。ClassInstanceConverterを使用する場合、データベース表現はクラス名を表す文字列になり、オブジェクト・モデル表現は引数なしのコンストラクタで構築されたクラスのインスタンスになります。

- none: 関連付けられたマッピングにコンバータを配置しません。別のコンバータがデフォルトで設定されているか、または別のコンバータが設定されている状況をオーバーライドするために使用できます。

これらの予約名のいずれかを使用しない場合は、@Converter注釈を使用してカスタム・コンバータを定義する必要があります。

例

例2-56に、@MapKeyConvert注釈を使用して、コンバータをマップのキーに適用します。

例2-56 @MapKeyConvert注釈の使用

@Entity
public class Entity
…
@ElementCollection
@MapKeyColumn(name=”BANK”)
@Column(name=”ACCOUNT”)
@Convert(”Long2String”)
@MapKeyConvert(”CreditLine”)
public Map<String,Long> getCreditLines() {
return creditLines;
}

例2-57に、eclipselink-orm.xmlファイルの<map-key-convert>要素を使用する方法を示します。

例2-57 <map-key-convert> XMLの使用

<element-collection name="creditLines">
<map-key-convert>CreditLine</map-key-convert>
<map-key-column name="BANK"/>
<column name="ACCOUNT"/>
<convert>Long2String</convert>
<object-type-converter name="CreditLine">
<conversion-value data-value="RBC" object-value="RoyalBank"/>
<conversion-value data-value="CIBC" object-value="CanadianImperial"/>
<conversion-value data-value="SB" object-value="Scotiabank"/>
<conversion-value data-value="TD" object-value="TorontoDominion"/>
</object-type-converter>
<type-converter name="Long2String" data-type="String" object-type="Long"/>
<collection-table name="EMP_CREDITLINES">
<join-column name="EMP_ID"/>
</collection-table>
</element-collection>

関連項目

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

- 「@Converter」

- 「@Convert」

@Multitenant

@Multitenant注釈は、指定のエンティティがアプリケーションの複数のテナント間で共有されることを指定します。マルチテナント・タイプは、これらのエンティティのデータを各テナントのデータベースに格納する方法を指定します。エンティティ・レベルまたはマップされたスーパークラス・レベルでマルチテナンシを指定できます。

注釈要素

表2-32は、この注釈の要素を示しています。

表2-32 @Multitenantの注釈要素

注釈要素

説明

デフォルト

boolean includeCriteria

SELECT、UPDATEおよびDELETE問合せにテナント基準を追加することが、データベースによって要求されるかどうかを示します。

true

MultitenantType value

使用するマルチテナント方針(SINGLE_TABLE、TABLE_PER_TENANTまたはVPD)を指定します。

SINGLE_TABLE

使用方法

@Multitenant注釈を使用する場合は、@Entityまたは@MappedSuperclass注釈とともにこの注釈を指定します。次に例を示します。

@Entity
@Multitenant
...
public class Employee() {
...
}

次の3種類のマルチテナンシを使用できます。

- 単一表マルチテナンシ

- テナントごとの表マルチテナンシ

- VPDマルチテナンシ

例

例2-58に、@Multitenant注釈の簡単な例を示します。この例では、PlayerエンティティにはデフォルトのPLAYER表に格納された複数のテナントの行があり、デフォルトのTENANT_ID列はデフォルトのコンテキスト・プロパティeclipselink.tenant-idとともに識別子として使用されます。

例2-58 最小の@Multitenant注釈

@Entity
@Multitenant
public class Player  {
}

アプリケーションで共有のEntityManagerFactoryを使用し、EntityManagerをテナント固有にする場合、ランタイム・コードは次のようになります。

Map<String, Object> emProperties = new HashMap<String, Object>();

emProperties.set("eclipselink.tenant-id", "HTHL");

EntityManager em = emf.createEntityManager(emProperties);

詳細な例は、「単一表マルチテナンシ」、「テナントごとの表マルチテナンシ」および「VPDマルチテナンシ」を参照してください。

単一表マルチテナンシ

SINGLE_TABLEマルチテナント・タイプは、エンティティまたはマップされたスーパークラスがマップする表に複数のテナントの行を含めることができることを指定します。テナント固有の行へのアクセスは、テナントに限定されます。

テナント固有の行は、テナント識別子列を使用することによってテナントに関連付けられます。識別子列は、アプリケーション・コンテキスト値とともに使用され、永続性コンテキストがアクセスできる対象を制限します。

マップされた表での問合せの結果は、プロパティ値として提供されるテナント識別子値に制限されます。これは、表のすべての挿入、更新および削除操作に適用されます。マルチテナント・メタデータがマップされたスーパークラス・レベルで適用される場合、サブエンティティによって独自のマルチテナント・メタデータが指定されていないかぎり、すべてのサブエンティティに適用されます。

注意:
単一表マルチテナンシのコンテキストでは、「単一表」は、複数のテナントが1つの表を共有できること、および各テナントのデータが識別子列によって他のテナントのデータと区別されることを意味します。単一表マルチテナンシとともに複数の表を使用できますが、その場合、エンティティの永続データは複数の表(TableおよびSecondaryTable)に格納され、複数のテナントがすべての表を共有できます。

テナント識別子列を使用して単一表マルチテナンシを構成する方法の詳細は、「@TenantDiscriminatorColumn」を参照してください。

例

次の例では、@Multitenant、@TenantDiscriminatorColumnおよびコンテキスト・プロパティを使用して、エンティティに単一表マルチテナンシを定義します。

例2-59 @Multitenantの使用例

@Entity
@Table(name=”EMP”)
@Multitenant(SINGLE_TABLE)
@TenantDiscriminatorColumn(name = ”TENANT_ID”,
contextProperty = "employee-tenant.id")

次の例では、<multitenant>要素を使用して、最小の単一表マルチテナンシを指定します。SINGLE_TABLEはデフォルト値のため、指定する必要はありません。

例2-60 <multitenant>の使用例

<entity class="model.Employee">
<multitenant/>
<table name="EMP"/>
...
</entity>

テナントごとの表マルチテナンシ

TABLE_PER_TENANTマルチテナント・タイプは、エンティティの表(TableおよびSecondaryTable)がテナント・コンテキストに基づいたテナント固有の表であることを指定します。これらの表へのアクセスは、指定のテナントに限定されます。結合表またはコレクション表を使用するエンティティ内のリレーションシップも、そのコンテキスト内に存在すると想定されます。

他のマルチテナント・タイプと同様に、エンティティ・レベルまたはマップされたスーパークラス・レベルで、テナントごとの表マルチテナンシを指定できます。エンティティ・レベルでは、トランザクションが開始した後、各エンティティ・マネージャでテナント・コンテキスト・プロパティを提供する必要があります。

テナントごとの表エンティティは、同じ永続性ユニット内の他のマルチテナント・タイプのエンティティと混在できます。

テナントのすべての読取り、挿入、更新および削除操作は、テナントの表にのみ適用されます。

テナントは、デフォルトで同じサーバー・セッションを共有します。各エンティティ・マネージャに対して、テナントごとの表の識別子を設定または更新する必要があります。ID生成は、テナントごとの表の方針に該当する、すべてのテナントで一意であると想定されます。

テナントごとの表マルチテナンシを構成する場合は、次を指定する必要があります。

- ユーザーを特定するテナントごとの表のプロパティ。エンティティ・マネージャごとに設定するか、永続性ユニット当たりのテナントごとの表を分離するために、エンティティ・マネージャ・ファクトリで設定できます。

- 他のテナントの表からテナントの表を特定および分離するためのテナント表識別子。識別子タイプは、SCHEMA、SUFFIXおよびPREFIXです。テナント識別子タイプの詳細は、「@TenantTableDiscriminator」を参照してください。

例

次の例では、エンティティでテナントごとの表マルチテナンシを定義するために使用される@Multitenant注釈を示します。@TenantTableDiscriminator(SCHEMA)は、識別子表がスキーマによって特定されることを指定します。

例2-61 @Multitenantと@TenantTableDiscriminatorの使用例

@Entity
@Table(name=”EMP”)
@Multitenant(TABLE_PER_TENANT)
@TenantTableDiscriminator(SCHEMA)
public class Employee {
...
}

次の例では、最小のテナントごとの表マルチテナンシを定義するために使用される<multitenant>要素および<tenant-table-discriminator>要素を示します。

例2-62 <multitenant>と<tenant-table-discriminator>の使用例

<entity class="Employee">
<multitenant type="TABLE_PER_TENANT">
<tenant-table-discriminator type="SCHEMA"/>
</multitenant>
<table name="EMP">
...
</entity>

VPDマルチテナンシ

VPD (仮想プライベート・データベース)マルチテナンシ・タイプは、データベースがすべてのSELECT、UPDATEおよびDELETE問合せでテナントのフィルタリングを処理することを指定します。このタイプを使用する場合、永続性ユニットとともに使用されるプラットフォームでVPDがサポートされている必要があります。

EclipseLink VPDマルチテナンシを使用する場合、@Multitenantおよび@TenantDiscriminatorColumnを使用して、最初にデータベースでVPDを構成してから、エンティティまたはマップされたスーパークラスでマルチテナンシを指定する必要があります。

例

例2-63に、エンティティに定義されたVPDマルチテナンシを示します。前述のとおり、データベースのVPDもVPDマルチテナンシを有効にするように構成する必要があります。この場合、VPDデータベースは、USER_ID列を使用して指定クライアントによる指定行へのアクセスを制限するように構成されています。そのため、USER_IDは、EclipseLinkマルチテナント操作のテナント識別子列としても指定されます。

例2-63 @Multitenant(VPD)の使用例

例は次のとおりです。

@Entity
@Multitenant(VPD)
@TenantDiscriminatorColumn(name = "USER_ID", contextProperty = "tenant.id")
@Cacheable(false)

public class Task implements Serializable {
...
...

例は次のとおりです。

例2-64 <multitenant>の使用例

<entity class="model.Employee">
<multitenant type="VPD">
<tenant-discriminator-column name="USER_ID" context-property="tenant.id"/>
</multitenant>
<table name="EMPLOYEE"/>
...
</entity>

関連項目

- 「@TenantDiscriminatorColumn」

- 「@TenantDiscriminatorColumns」

- EclipseLinkソリューション・ガイドのマルチテナンシの使用に関する項

- マルチテナントの例: http://wiki.eclipse.org/EclipseLink/Examples/JPA/Multitenant

@Mutable

@Basicマッピングで@Mutableを使用して、複合フィールド・タイプの値を置換するのではなく、変更できる(または変更できない)かどうかを指定します。可変マッピングは、変更追跡のパフォーマンスに影響する場合があります。属性変更追跡は、非可変マッピングを使用する場合にのみウィービングできます。

注釈要素

表2-33は、この注釈の要素を示しています。

表2-33 @Mutableの注釈要素

注釈要素

説明

デフォルト

boolean value

(オプション)マッピングが可変かどうかを指定します。

true

使用方法

ほとんどの基本タイプ(int、long、float、double、String、BigDecimalなど)は、可変ではありません。

デフォルトでは、DateおよびCalendarタイプは可変ではないと想定されます。これらのタイプを可変にするには、@Mutable注釈を使用します。グローバルな永続性プロパティeclipselink.temporal.mutableを使用して、マッピングを可変として設定することもできます。

デフォルトでは、シリアライズされたタイプは可変と想定されます。@Mutable注釈をfalseに設定して、これらのタイプを可変でなくすることができます。

persistence.xmlファイルにある永続性ユニットのDateおよびCalendarフィールドの可変マッピングも構成できます。

例

例2-65に、@Mutable注釈を使用してEmployeeフィールドのhireDateを指定する方法を示します。

例2-65 @Mutable注釈の使用

@Entity
public class Employee implements Serializable {

...

@Temporal(DATE)
@Mutable
public Calendar getHireDate() {
return hireDate;
}

..
}

例2-66に、永続性ユニットのpersistence.xmlファイルで、またはpropertyマップをインポートすることによって、可変マッピングを構成する方法を示します。

例2-66 persistence.xmlでの可変マッピングの指定

persistence.xmlファイルを使用する場合:

<property name="eclipselink.temporal.mutable" value="true"/>

propertyマップを使用する場合:

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.TEMPORAL_MUTABLE, "false");

関連項目

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

- 「マッピング注釈」

@NamedPLSQLStoredFunctionQueries

@NamedPLSQLStoredFunctionQueries注釈を使用して、複数のNamedPLSQLStoredFunctionQuery項目を定義します。

注釈要素

表2-34は、この注釈の要素を示しています。

表2-34 @NamedPLSQLStoredFunctionQueriesの注釈要素

注釈要素

説明

デフォルト

NamedStoredFunctionQuery[]

(必須)名前付きストアド・プロシージャ問合せの配列

関連項目

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

- 「@NamedPLSQLStoredFunctionQueries」

@NamedPLSQLStoredFunctionQuery

@NamedPLSQLStoredFunctionQuery注釈を使用して、名前付き問合せとしてOracle PLSQLストアド・ファンクションをコールする問合せを定義します。

注釈要素

表2-36は、この注釈の要素を示しています。

表2-35 @NamedPLSQLStoredFunctionQueryの注釈要素

注釈要素

説明

デフォルト

functionName

(必須)ストアド・ファンクションの名前

name

(必須)このストアド・ファンクション問合せを参照する一意の名前

returnParamter

(必須)ストアド・ファンクションの戻り値

hints

(オプション)問合せヒント

parameters

(オプション)ストアド・ファンクションのパラメータ

resultSetMapping

(オプション)SQLResultMappingの名前

使用方法

この注釈は、JDBCからアクセスできないRECORDおよびTABLEなどの複合PLSQLタイプのサポートを追加します。

@NamedPLSQLStoredFunctionQueryは、エンティティまたはMappedSuperclassに指定できます。

例

例2-67に、この注釈を使用する方法を示します。

例2-67 @NamedPLSQLStoredFunctionQuery注釈の使用

@NamedPLSQLStoredFunctionQuery(
name="getEmployee",
functionName="EMP_PKG.GET_EMP",
returnParameter=@PLSQLParameter(
name="RESULT",
databaseType="EMP_PKG.EMP_TABLE"
)
)
@Embeddable
@Struct(name="EMP_TYPE", fields={"F_NAME", "L_NAME", "SALARY"})
@PLSQLRecord(
name="EMP_PKG.EMP_REC",
compatibleType="EMP_TYPE",
javaType=Employee.class,
fields={
@PLSQLParameter(name="F_NAME"),
@PLSQLParameter(name="L_NAME"),
@PLSQLParameter(
name="SALARY",
databaseType="NUMERIC_TYPE"
)
}
)

public class Employee { ...}

関連項目

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

- Oracle PL/SQL
http://www.oracle.com/technetwork/database/features/plsql/index.html

@NamedPLSQLStoredProcedureQueries

@NamedPLSQLStoredProcedureQueries注釈を使用して、複数のNamedPLSQLStoredProcedureQuery項目を定義します。

注釈要素

表2-36は、この注釈の要素を示しています。

表2-36 @NamedPLSQLStoredProcedureQueriesの注釈要素

注釈要素

説明

デフォルト

value

(必須)名前付きストアド・プロシージャ問合せの配列

例

例2-68に、この注釈を使用する方法を示します。

例2-68 @NamedPLSQLStoredProcedureQueries注釈の使用

@NamedPLSQLStoredProcedureQueries({
@NamedPLSQLStoredProcedureQuery(name="getEmployee",
functionName="EMP_PKG.GET_EMP",
parameters={ @PLSQLParameter( name="EMP_OUT", direction=:Direction.OUT, databaseType="EMP_PKG.EMP_REC") } )
})

関連項目

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

- 「@NamedPLSQLStoredProcedureQuery」

- EclipseLinkの理解のストアド・プロシージャに関する項

- Oracle PL/SQL http://www.oracle.com/technetwork/database/features/plsql/index.html

@NamedPLSQLStoredProcedureQuery

@NamedPLSQLStoredProcedureQuery注釈を使用して、名前付き問合せとしてOracle PLSQLストアド・プロシージャをコールする問合せを定義します。

注釈要素

表2-37は、この注釈の要素を示しています。

表2-37 @NamedPLSQLStoredProcedureQueryの注釈要素

注釈要素

説明

デフォルト

procedureName

(必須)ストアド・プロシージャの名前

name

(必須)このストアド・プロシージャ問合せを参照する一意の名前

resultClass

(オプション)結果のクラス。

hints

(オプション)問合せヒント

parameters

(オプション)ストアド・プロシージャのパラメータ

resultSetMapping

(オプション)SQLResultMappingの名前

使用方法

この注釈は、JDBCからアクセスできないRECORDおよびTABLEなどの複合PLSQLタイプのサポートを追加します。

@NamedPLSQLStoredProcedureQueryは、エンティティ、埋込み可能またはMappedSuperclassに指定できます。

例

例2-69に、この注釈を使用する方法を示します。

例2-69 @NamedPLSQLStoredProcedureQuery注釈の使用

@NamedPLSQLStoredProcedureQuery(
name="getEmployee",
procedureName="MyStoredProcedure",
functionName="EMP_PKG.GET_EMP",
parameters={
@PLSQLParameter(
name="EMP_OUT",
direction=Direction.OUT,
databaseType="EMP_PKG.EMP_REC"
)
}
)
@Embeddable
@Struct(name="EMP_TYPE", fields={"F_NAME", "L_NAME", "SALARY"})
@OracleObject(
name="EMP_PKG.EMP_REC",
compatibleType="EMP_TYPE",
javaType=Employee.class,
fields={
@PLSQLParameter(name="F_NAME"),
@PLSQLParameter(name="L_NAME"),
@PLSQLParameter(
name="SALARY",
databaseType="NUMERIC_TYPE"
)
}
)

public class Employee { ...}

関連項目

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

- EclipseLinkの理解のストアド・プロシージャに関する項

- Oracle PL/SQL http://www.oracle.com/technetwork/database/features/plsql/index.html

@NamedStoredFunctionQueries

@NamedStoredFunctionQueries注釈を使用して、複数のNamedStoredFunctionQuery項目を定義します。

注釈要素

表2-38は、この注釈の要素を示しています。

表2-38 @NamedStoredFunctionQueriesの注釈要素

注釈要素

説明

デフォルト

NamedStoredFunctionQuery[]

(必須)名前付きストアド・プロシージャ問合せの配列

例

例2-70に、この注釈を使用する方法を示します。

例2-70 @NamedStoredFunctionQueries注釈の使用

@NamedStoredFunctionQueries{(
@NamedStoredFunctionQuery(
name="StoredFunction_In",
functionName="StoredFunction_In",
parameters={
@StoredProcedureParameter(direction=IN, name="P_IN", queryParameter="P_IN", type=Long.class)
},
returnParameter=@StoredProcedureParameter(queryParameter="RETURN", type=Long.class)
)
)}

複数の名前付きストアド・プロシージャをeclipselink-orm.xmlファイルで定義する場合、複数の<named-stored-function_query>要素のリストを作成します。

関連項目

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

- 「@NamedStoredFunctionQuery」

@NamedStoredFunctionQuery

@NamedStoredFunctionQueryを使用して、名前付き問合せとしてストアド・ファンクションをコールする問合せを定義します。

注釈要素

表2-39は、この注釈の要素を示しています。

表2-39 @NamedStoredFunctionQueryの注釈要素

注釈要素

説明

デフォルト

functionName

(必須)ストアド・ファンクションの名前

name

(必須)このストアド・ファンクション問合せを参照する一意の名前

returnParamter

(必須)ストアド・ファンクションの戻り値

callByIndex

(オプション)ストアド・ファンクションを索引で、または名前でコールすることを指定します。

- 索引の場合、データベースのプロシージャと同じ順序でパラメータを定義する必要があります。

- 名前の場合、プロシージャ・パラメータに名前を付けるデータベース・プラットフォーム・サポートを使用する必要があります。

false

hints

(オプション)問合せヒント

parameters

(オプション)ストアド・ファンクションのパラメータ

resultSetMapping

(オプション)SQLResultMappingの名前

使用方法

@NamedStoredFunctionQueryは、エンティティまたはMappedSuperclassに指定できます。

例

例2-71に、この注釈を使用する方法を示します。

例2-71 @NamedStoredFunctionQuery注釈の使用

@Entity
@Table(name="CMP3_ADDRESS")

@NamedStoredFunctionQuery(
name="StoredFunction_In",
functionName="StoredFunction_In",
parameters={
@StoredProcedureParameter(direction=IN, name="P_IN", queryParameter="P_IN", type=Long.class)
},
returnParameter=@StoredProcedureParameter(queryParameter="RETURN", type=Long.class)
)
public class Address implements Serializable {
...
}

例2-72に、eclipselink-orm.xmlファイルの<named-stored-function-query>要素を使用する方法を示します。

例2-72 <named-stored-function-query> XMLの使用

<named-stored-function-query name="StoredFunction_In" procedure-name="StoredFunction_In">
<parameter direction="IN" name="P_IN" query-parameter="P_IN" type="Long"/>
</named-stored-function-query>

関連項目

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

- 「@NamedStoredFunctionQueries」

@NamedStoredProcedureQueries

@NamedStoredProcedureQueries注釈を使用して、複数のNamedStoredProcedureQuery項目を定義します。

注釈要素

表2-40は、この注釈の要素を示しています。

表2-40 @NamedStoredProcedureQueriesの注釈要素

注釈要素

説明

デフォルト

value

(必須)名前付きストアド・プロシージャ問合せの配列

例

例2-73に、この注釈を使用する方法を示します。

例2-73 @NamedStoredProcedureQueries注釈の使用

@Entity
@Table(name="EMPLOYEE")
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(
name="ReadEmployeeInOut",
resultClass=org.eclipse.persistence.testing.models.jpa.customfeatures.Employee.class,
procedureName="Read_Employee_InOut",
parameters={
@StoredProcedureParameter(direction=IN_OUT, name="employee_id_v", queryParameter="ID", type=Integer.class),
@StoredProcedureParameter(direction=OUT, name="nchar_v", queryParameter="NCHARTYPE", type=Character.class)}
),
@NamedStoredProcedureQuery(
name="ReadEmployeeCursor",
resultClass=org.eclipse.persistence.testing.models.jpa.customfeatures.Employee.class,
procedureName="Read_Employee_Cursor",
parameters={
@StoredProcedureParameter(direction=IN, name="employee_id_v", queryParameter="ID", type=Integer.class),
@StoredProcedureParameter(direction=OUT_CURSOR, queryParameter="RESULT_CURSOR")})
})
public class Employee implements Serializable {

複数の名前付きストアド・プロシージャ問合せをeclipselink-orm.xmlファイルで定義する場合、複数の<named-stored-procedure_query>要素のリストを簡単に作成します。

関連項目

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

- 「@NamedStoredProcedureQuery」

- EclipseLinkの理解のストアド・プロシージャに関する項

@NamedStoredProcedureQuery

@NamedStoredProcedureQuery注釈を使用して、名前付き問合せとしてストアド・プロシージャをコールする問合せを定義します。

注釈要素

表2-41は、この注釈の要素を示しています。

表2-41 @NamedStoredProcedureQueryの注釈要素

注釈要素

説明

デフォルト

name

(必須)このストアド・プロシージャ問合せを参照する一意の名前

procedureName

(必須)ストアド・プロシージャの名前。

callByIndex

(オプション)ストアド・プロシージャを名前でコールするかどうかを指定します。

- trueの場合、データベースのプロシージャと同じ順序でStoredProcedureParametersを定義する必要があります。

- falseの場合、データベース・プラットフォームはプロシージャ・パラメータへの名前付けをサポートしている必要があります。

false

hints

(オプション)問合せヒントの配列

multipleResultSets

(オプション)ストアド・プロシージャが複数の結果セットを戻すかどうかを指定します。

これは、ストアド・プロシージャからの複数の結果セットをサポートしているデータベースにのみ適用されます。

false

parameters

(オプション)ストアド・プロシージャのパラメータの配列。

resultClass

(オプション)結果のクラス。

void.class

resultSetMapping

(オプション)SQLResultMappingの名前。

returnsResultSet

(オプション)ストアド・プロシージャが結果セットを保持するかどうかを指定します。

このことは、ストアド・プロシージャからの結果セットがサポートされているデータベースにのみ適用されます。

false

使用方法

EntityまたはMappedSuperクラスに@NamedStoredProcedureQueryを指定できます。

例

例2-74に、@NamedStoredProcedureQueryを使用してストアド・プロシージャを定義する方法を示します。

例2-74 @NamedStoredProcedureQuery注釈の使用

@NamedStoredProcedureQuery(name="findAllEmployees", procedureName="EMP_READ_ALL", resultClass=Employee.class, parameters={
@StoredProcedureParameter(queryParameter="result", name="RESULT_CURSOR", direction=Direction.OUT_CURSOR})
@Entity
public class Employee {
...
}

例2-75に、eclipselink-orm.xmlファイルの<named-stored-procedure-query>要素を使用する方法を示します。

例2-75 <named-stored-procedure-query> XMLの使用

<named-stored-procedure-query name="SProcXMLInOut" result-class="Address" procedure-name="SProc_Read_XMLInOut">
<parameter direction="IN_OUT" name="address_id_v" query-parameter="ADDRESS_ID" type="Long"/>
<parameter direction="OUT" name="street_v" query-parameter="STREET" type="String"/>
</named-stored-procedure-query>

関連項目

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

- 「@NamedStoredProcedureQueries」

- EclipseLinkの理解のストアド・プロシージャに関する項

@Noncacheable

@Noncacheableを使用して、リレーションシップのキャッシュ動作を構成します。リレーションシップで使用される場合、親エンティティがキャッシュされても、そのリレーションシップはキャッシュされません。

注釈要素

この注釈の要素はありません。

使用方法

EclipseLinkがエンティティを取得するたびに、リレーションシップはデータソースからリロードされます。リレーションシップのキャッシングが望ましくない状況において、または、異なるEclipseLinkキャッシュ・タイプを使用したり、参照をキャッシュしていることによって、異なるキャッシュ・スキームを使用する関連エンティティのキャッシュ存続期間が延長される場合に、このことが役立つことがあります。たとえば、エンティティAはエンティティBを参照し、エンティティAはFullで、エンティティBはWeakになります。リレーションシップのキャッシングを削除しない場合、エンティティBのキャッシュは、実質的にFullになります。

例

例2-76に、@Noncacheableを使用して保護されたキャッシュを作成する方法を示します。

例2-76 @Noncacheable注釈の使用

@Entity
@Cache(
isolation=CacheIsolationType.PROTECTED
)
public class Employee {
@Id
private long id;
...
@OneToMany(mappedBy="manager")
@Noncacheable
private List<Employee> managedEmployees;
...
}

例2-77に、eclipselink-orm.xmlファイルの<noncacheable> XML要素の使用を示します。

例2-77 <noncacheable> XMLの使用

<?xml version="1.0"?>
<entity-mappings
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/orm http://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_4.xsd"
version="2.4">
<entity name="Employee" class="org.acme.Employee" access="FIELD">
<cache isolation="PROTECTED"/>
<attributes>
<id name= "id"/>
<one-to-many name="managedEmployees" mapped-by="manager">
<noncacheable/>
</one-to-many>
</attributes>
</entity>
</entity-mappings

関連項目

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

- EclipseLinkの理解のEclipseLinkキャッシュに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のEclipseLinkアプリケーションのスケーリングに関する項

@NoSql

@NoSqlを使用して、リレーショナルでない(つまり、SQLではない)データソースを指定します。EclipseLinkは、非リレーショナル・データをオブジェクトにマップし、JPAを介してそのデータにアクセスできます。

注釈要素

表2-42は、この注釈の要素を示しています。

表2-42 @NoSqlの注釈要素

注釈要素

説明

デフォルト

dataType

エンティティ構造の名前。dataTypeの目的は、使用されるNoSQLプラットフォームによって異なります。

- MongoDBでは、JSONドキュメントが格納されるコレクション名です。

- Oracle NoSQLでは、主なキー値の最初の部分です。

- XMLファイルでは、ファイル名およびXMLメッセージングであり、XMLを使用します。

dataFormat

(オプション)データがデータベース内に格納されるタイプ構造(データ形式)。

- INDEXED: クラスを値の配列にマップします。

- MAPPED: クラスを一連のネストされたキー/値ペアにマップし、値は埋込みマップまたはリストになります。
キー/値ストア、JSONデータベースおよびその他の構造化されたデータ・システムにマップするために使用します。

- XML: クラスをXMLドキュメントにマップします。
XMLデータストア、XMLファイル、XMLメッセージング・システムおよびその他のXMLシステムとともに使用します。

XML

使用方法

dataFormatは、使用されるNoSQLプラットフォームによって異なります。

- MongoDBでは、MAPPEDを使用します。

- Oracle NoSQLでは、MAPPED (キー/値データ)またはXML (単一XML文書の場合)を使用します。

- XMLファイルおよびXMLメッセージングでは、XMLを使用します。

サポートされるデータ・ソース

EclipseLinkでは、JavaEE Connector Architecture CCI (Common Client Interface) APIを介した汎用NoSQLおよびEISデータソースと同様に、様々なNoSQLおよびEISプラットフォームがサポートされています。独自のEISPlatformサブクラスおよびJCAアダプタも定義できます。

EclipseLinkでは、次のデータソースがサポートされています。

- MongoDB

- Oracle NoSQL

- XMLファイル

- JMS

- Oracle AQ

例

例2-78に、XMLデータソースとの@NoSqlの使用を示します。

例2-78 @NoSql注釈とXMLの使用

@Entity
@NoSql(dataType="order")
public class Order {
@Id
@GeneratedValue
@Field(name="@id")
private long id;
@Basic
@Field(name="@description")
private String description;
@Embedded
@Field(name="delivery-address")
private Address deliveryAddress
@ElementCollection
@Field(name="orderLines/order-line")
private List<OrderLine> orderLines;
@ManyToOne
@JoinField(name="customer-id")
private Customer customer;
}

@Embeddable
@NoSql
public class OrderLine {
@Field(name="@line-number")
private int lineNumber;
@Field(name="@item-name")
private String itemName;
@Field(name="@quantity")
private int quantity;
}

これにより、次のXMLデータが作成されます。

<order id="4F99702B271B1948027FAF06" description="widget order">
<deliveryAddress street="1712 Hasting Street" city="Ottawa" province="ON" postalCode="L5J1H5"/>
<order-lines>
<order-line lineNumber="1" itemName="widget A" quantity="5"/>
<order-line lineNumber="2" itemName="widget B" quantity="1"/>
<order-line lineNumber="3" itemName="widget C" quantity="2"/>
<order-lines>
<customer-id>4F99702B271B1948027FAF08</customer-id>
<order>

例2-79に、JSONデータソースとの@NoSqlの使用を示します。

例2-79 @NoSql注釈とJSONの使用

@Entity
@NoSql(dataType="orders", dataFormat=DataFormatType.MAPPED)
public class Order {
@Id
@GeneratedValue
@Field(name="_id")
private long id;
@Basic
@Field(name="description")
private String description;
@Embedded
@Field(name="deliveryAddress")
private Address deliveryAddress
@ElementCollection
@Field(name="orderLines")
private List<OrderLine> orderLines;
@ManyToOne
@JoinField(name="customerId")
private Customer customer;
}

@Embeddable
@NoSql(dataFormat=DataFormatType.MAPPED)
public class OrderLine {
@Field(name="lineNumber")
private int lineNumber;
@Field(name="itemName")
private String itemName;
@Field(name="quantity")
private int quantity;
}

これにより、次のJSONドキュメントが作成されます。

{
"_id": "4F99702B271B1948027FAF06",
"description": "widget order",
"deliveryAddress": {
"street": "1712 Hasting Street",
"city": "Ottawa",
"province": "ON",
"postalCode": "L5J1H5",
},
"orderLines": [
{"lineNumber": "1", "itemName": "widget A", "quantity": "5"},
{"lineNumber": "2", "itemName": "widget B", "quantity": "1"},
{"lineNumber": "3", "itemName": "widget C", "quantity": "2"}
],
"customerId": "4F99702B271B1948027FAF08",
}

関連項目

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

- Oracle Coherence Oracle ToplinkおよびCoherence Grid統合ガイド

- EclipseLinkの理解の非SQLデータベースの使用に関する項

- EclipseLinkの理解のNoSQLデータベースの使用に関する項

- EclipseLinkソリューション・ガイドのEclipseLinkと非リレーショナル・データベースの使用に関する項

- 「nosql.property」

@ObjectTypeConverter

@ObjectTypeConverter注釈は、マップ済属性の読取りおよび書込み中にデータベース・データ値の固定数をJavaオブジェクト値に変換するorg.eclipse.persistence.mappings.converters.ObjectTypeConverterを指定します。

注釈要素

表2-43は、この注釈の要素を示しています。

表2-43 @ObjectTypeConverterの注釈要素

注釈要素

説明

デフォルト

name

この属性をコンバータのStringの名前に設定します。この名前が永続性ユニットで一意であることを確認します。

なし

dataType

(オプション)この属性をデータベースに格納されるタイプに設定します。

void.class [1]

objectType

(オプション)この属性の値をエンティティに格納されるタイプに設定します。

void.class [1]

conversionValues

この属性の値を変換値(ConversionValue: String objectValueおよびString dataValueのインスタンス)の配列に設定します。

なし

defaultObjectValue

この属性の値をデフォルトのオブジェクト値に設定します。この引数はデータ値がない場合にレガシー・データを処理するためのものであることに注意してください。

空のString

脚注 1 デフォルトは、永続性フィールドまたはプロパティのタイプから推測されます。

使用方法

EclipseLinkには、@TypeConverterおよび@StructConverterコンバータも含まれています。

例

例2-80に、@ObjectTypeConverter注釈を使用してgenderフィールドのオブジェクト・コンバータを指定する方法を示します。

例2-80 @ObjectTypeConverter注釈の使用

public class Employee implements Serializable{
...
@ObjectTypeConverter (
name="genderConverter",
dataType=java.lang.String.class,
objectType=java.lang.String.class,
conversionValues={
@ConversionValue(dataValue="F", objectValue="Female"),
@ConversionValue(dataValue="M", objectValue="Male")}
)
@Convert("genderConverter")
public String getGender() {
return gender;
}
...
}

例2-81に示すように、ソース・コードで@ObjectTypeConverter注釈を使用するかわりにデプロイメント・ディスクリプタで<object-type-converter>要素を使用できます。

例2-81 <object-type-converter> XMLの使用

<object-type-converter name="gender-converter" object-type="model.Gender"     data-type="java.lang.String">
<conversion-value object-value="Male" data-value="M" />
<conversion-value object-value="Female" data-value="F" />
</object-type-converter>

関連項目

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

- 「@TypeConverter」

- 「@StructConverter」

- 「@ConversionValue」

@ObjectTypeConverters

@ObjectTypeConvertersを使用して、複数のObjectTypeConverter項目を定義します。

注釈要素

表2-44は、この注釈の要素を示しています。

表2-44 @ObjectTypeConvertersの注釈要素

注釈要素

説明

デフォルト

ObjectTypeConverter

(必須) @ObjectTypeConverterの配列

例

例2-82に、この注釈を使用する方法を示します。

例2-82 @ObjectTypeConverters注釈の使用

@Entity(name="Employee")
@Table(name="CMP3_FA_EMPLOYEE")
@ObjectTypeConverters({
@ObjectTypeConverter(
name="sex",
dataType=String.class,
objectType=org.eclipse.persistence.testing.models.jpa.fieldaccess.advanced.Employee.Gender.class,
conversionValues={
@ConversionValue(dataValue="F", objectValue="Female"),
@ConversionValue(dataValue="M", objectValue="Male")
}
)
})

複数のオブジェクト・タイプ・コンバータをeclipselink-orm.xmlファイルで定義するには、複数の<object-type-converter>要素のリストを作成するだけです。

関連項目

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

- 「@ObjectTypeConverter」

@OptimisticLocking

@OptimisticLockingを使用して、エンティティを更新または削除する際にEclipseLinkが使用するオプティミスティック・ロックのタイプを指定します。

注釈要素

表2-45は、この注釈の要素を示しています。

表2-45 @OptimisticLockingの注釈要素

注釈要素

説明

デフォルト

cascade

(オプション) オプティミス・ロック・ポリシーがロックをカスケードする必要のある場所を指定します。私有および孤立の削除オブジェクトを変更すると、EclipseLinkでバージョンが更新されます。

この要素は現在、VERSION_COLUMNロックでのみサポートされています。

false

selectedColumns

(オプション)オプティミスティックにロックされる列のリストを指定します。

この要素は、type=SELECTED_COLUMNSの場合に必要です。

type

(オプション)使用するオプティミスティック・ロック・ポリシーのタイプは、次のとおりです。

- ALL_COLUMNS: EclipseLinkは、更新または削除操作を実行する際に、表内のすべてのフィールドをWHERE句と比較します。

- CHANGED_COLUMNS: EclipseLinkは、更新を実行する際に、WHERE句の変更されたフィールドのみを比較します。

- SELECTED_COLUMNS: EclipseLinkは、SelectedColumnsで更新または削除操作を実行する際に、WHERE句の選択したフィールドを比較します。

- VERSION_COLUMN: EclipseLinkは、更新を実行する際に、WHERE句の単一バージョン番号を比較します。

VERSION_COLUMN

使用方法

エンティティまたはMappedSuperclassに@OptimisticLockingを指定できます。

例

例2-83に、すべての列に@OptimisticLocking注釈を使用する方法を示します。

例2-83 @OptimisticLocking注釈の使用

@Table(name = "EMPLOYEES")
@OptimisticLocking(type=OptimisticLockingType.ALL_COLUMNS)
public class Employee implements Serializable {
...
}

例2-83に、単一列にeclipselink-orm.xmlファイルの<optimistic-locking>要素を使用する方法を示します。

例2-84 <optimistic-locking> XMLの使用

<entity name="Employee" class="my.Employee" access="PROPERTY" change-tracking="DEFERRED">
...
<optimistic-locking type="SELECTED_COLUMNS" cascade="false">
<selected-column name="id"/>
<selected-column name="firstName"/>
</optimistic-locking>
...
</entity>

関連項目

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

- EclipseLinkソリューション・ガイドのクラスタ内のEclipseLinkアプリケーションのスケーリングに関する項

@OracleArray

@OracleArray注釈を使用して、Oracle DatabaseのVARRAYタイプを定義します。これはPLSQLプロシージャ・コール内で使用できます。

注釈要素

表2-46は、この注釈の要素を示しています。

表2-46 @OracleArrayの注釈要素

要素

説明

デフォルト

name

(必須)データベースのVARRAYの名前

nestedType

(必須)VARRAYが保持するデータベース・タイプの名前

VARCHAR_TYPE

javaType

(オプション) VARRAYをマップするJava Collectionクラス

ArrayList

例

例2-85に、@OracleArray注釈を使用してVARRAYタイプを定義する方法を示します。

例2-85 @OracleArray注釈の使用

@NamedPLSQLStoredFunctionQuery(
name="getEmployee",
functionName="EMP_PKG.GET_EMP",
parameters={
@PLSQLParameter(
name="EMP_OUT",
direction=Direction.OUT,
databaseType="EMP_PKG.EMP_REC"
)
}
)
@Embeddable
@Struct(name="EMP_TYPE", fields={"F_NAME",
"L_NAME","SALARY"})
@OracleArray(
name="EMP_PKG.EMP_REC",
nestedType=VARCHAR_TYPE
javaType=Employee.class,
)
public class Employee{...}

この例を確認して、変更が必要な点をご連絡ください。

関連項目

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

- 「@NamedPLSQLStoredProcedureQuery」

- 「@OracleArrays」

@OracleArrays

@OracleArrays注釈を使用して、複数のVARRAYタイプを定義します。

注釈要素

表2-47は、この注釈の要素を示しています。

表2-47 @OracleArraysの注釈要素

要素

説明

デフォルト

value

(必須) Oracle VARRAYタイプの配列

例

この注釈の使用例は、「@OracleArray」を参照してください。

関連項目

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

- 「@OracleArray」

@OracleObject

@OracleObject注釈を使用して、Oracle DatabaseのOBJECTタイプを定義します。これはPLSQLプロシージャ・コール内で使用できます。

注釈要素

表2-48は、この注釈の要素を示しています。

表2-48 @OracleObjectの注釈要素

要素

説明

デフォルト

name

(必須)データベースのOBJECTタイプの名前

javaType

(オプション) OBJECTタイプをマップするJavaタイプ。このクラスは、@STRUCT注釈を使用してマップする必要があります。

void

fields

(必須)レコード・タイプのパラメータ・フィールドを定義します

例

例2-86に、@OracleObject注釈を使用してOracle OBJECTタイプを定義する方法を示します。

例2-86 @OracleObject注釈の使用

@NamedPLSQLStoredFunctionQuery(
name="getEmployee",
functionName="EMP_PKG.GET_EMP",
parameters={
@PLSQLParameter(
name="EMP_OUT",
direction=Direction.OUT,
databaseType="EMP_PKG.EMP_REC"
)
}
)
@Embeddable
@Struct(name="EMP_TYPE", fields={"F_NAME",
"L_NAME","SALARY"})
@OracleObject(
name="EMP_PKG.EMP_REC",
javaType=Employee.class,
fields={
@PLSQLParameter(name="F_NAME"),
@PLSQLParameter(name="L_NAME"),
@PLSQLParameter(
name="SALARY",
databaseType="NUMERIC_TYPE"
)
}
)
public class Employee{...}

関連項目

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

- 「@NamedPLSQLStoredProcedureQuery」

- 「@OracleObjects」

@OracleObjects

@OracleObjects注釈を使用して、複数のOracle OBJECTタイプを定義します。

注釈要素

表2-49は、この注釈の要素を示しています。

表2-49 @OracleObjectsの注釈要素

要素

説明

デフォルト

value

(必須) Oracle OBJECTタイプの配列

例

この注釈の使用例は、「@OracleObject」を参照してください。

関連項目

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

- 「@OracleObject」

@OrderCorrection

@OrderCorrectionを使用して、データベースから読み取られた順序リストが無効な場合(たとえば、Null、重複、負の値、またはリスト・サイズ以上の値がある場合)に使用する方針を指定します。

有効にするには、n要素の順序リストは{0, 1,..., n-1}である必要があります。

注釈要素

表2-50は、この注釈の要素を示しています。

表2-50 @OrderCorrectionの注釈要素

注釈要素

説明

デフォルト

value

(オプション)データベースから読み取られた順序リストが無効な場合に使用する方針を指定します。

- EXCEPTION

- READ

- READ_WRITE

READ_WRITE

使用方法

@OrderCorrectionを使用すると、EclipseLinkが無効なリストの順序を処理する方法を指定できます。

- EXCEPTION: OrderCorrectionType=EXCEPTIONの場合、EclipseLinkはリストを修正しません。かわりに、EclipseLinkは、エラー・コードQueryException.LIST_ORDER_FIELD_WRONG_VALUEでQueryExceptionをスローします。
たとえば、データベースに次の3つのオブジェクトのリストがあるとします。

{null, objectA}; {2, objectB}, {5, ObjectC};

アプリケーションに読み取る際、EclipseLinkは例外をスローします。

- READ: OrderCorrectionType=READの場合、EclipseLinkはアプリケーションに読み取られたリストを修正しますが、データベースに残る無効なリストの順序に関する情報は保持しません。これは、リストを読取り専用で使用する場合は問題になりませんが、リストを変更してデータベースに保存する場合は、順序がキャッシュとは異なり、無効になる可能性が高くなります。
READモードは、マップ済属性がListではない場合にデフォルトとして使用されます。

たとえば、データベースに次の3つのオブジェクトのリストがあるとします。

{null, objectA}; {2, objectB}, {5, ObjectC}

- リストとして読み取られる場合: {objectA, objectB, objectC}

- 新しい要素をリストに追加する場合: {objectA, objectB, objectC, objectD}

- 更新したリストをデータベースに保存する場合: {null, objectA}, {2, objectB}, {5, objectC}, {3, objectD}

- リストを再度読み取る場合: {objectA, objectB, objectD, objectC}

- READ_WRITE: OrderCorrectionType=READ_WRITEの場合、EclipseLinkは、アプリケーションに読み取られるリストの順序を修正し、データベースに残った無効なリストの順序を記憶します。リストが更新されてデータベースに保存される場合、順序索引はデータベースのリスト順序がキャッシュ内とまったく同じになるように保存されます(そのため、有効になります)。
READ_WRITEモードは、マップ済属性がListまたはVectorのいずれか(つまり、EclipseLinkの内部クラスIndirectListから割当て可能)の場合にデフォルトとして使用されます。JPAでは、モードが指定されなければ、READ_WRITEがデフォルトとして使用されます。

たとえば、データベースに次の3つのオブジェクトのリストがあるとします。

{null, objectA}; {2, objectB}, {5, ObjectC}

- リストとして読み取られる場合: {objectA, objectB, objectC}

- 新しい要素をリストに追加する場合: {objectA, objectB, objectC, objectD}

- 更新したリストをデータベースに保存する場合: {0, objectA}, {1, objectB}, {2, objectC}, {3, objectD}

- リストを再度読み取る場合: {objectA, objectB, objectC, objectD}

例

例2-87に、この注釈を使用する方法を示します。

例2-87 @OrderCorrection注釈の使用

@OrderColumn(name="ORDER_COLUMN")
@OrderCorrection(EXCEPTION)
List<String> designations;

例2-88に、eclipselink-orm.xmlファイルでこの拡張を使用する方法を示します。

例2-88 XMLでの<element-collection>の使用

<element-collection name="designations">
<order-column name="ORDER_COLUMN" correction-type="EXCEPTION"/>
</element-collection>

関連項目

詳細は、次のドキュメントを参照してください。

- 「エンティティ注釈」

@Partitioned

@Partitionedを使用して、エンティティまたはリレーションシップに使用するパーティション・ポリシーを指定します。

注釈要素

表2-51は、この注釈の要素を示しています。

表2-51 @Partitionedの注釈要素

注釈要素

説明

デフォルト

value

(必須)パーティション・ポリシーの名前

使用方法

パーティション化を使用して、複数のデータベースまたはデータベース・クラスタ(Oracle RACなど)間にあるクラスのデータをパーティション化します。パーティション化することで、複数のデータベース・マシンが要求に応えることができるようになり、スケーラビリティを向上できます。

エンティティ、リレーションシップ、問合せ、またはセッション/永続性ユニットで@Partitionedを指定できます。

パーティション・ポリシー

データのパーティション化を構成するには、@Partitioned注釈および1つ以上のパーティション・ポリシーの注釈を使用します。様々な種類のポリシーを定義する注釈は、次のとおりです。

- @HashPartitioning: オブジェクト(オブジェクトのID、場所、テナントなど)からのフィールド値のハッシュによって、データベース・クラスタへのアクセスをパーティション化します。ハッシュによって、接続プール/ノードのリストに索引が付けられます。ハッシュ値を持つオブジェクトに対するすべての書込みまたは読取り要求は、同じサーバーに送信されます。問合せにハッシュがパラメータとして含まれていない場合は、問合せをすべてのサーバーに送信して統合するか、セッションのデフォルトの動作のままにすることができます。

- @PinnedPartitioning: 単一の接続プール/ノードへの要求を固定します。これにより、垂直パーティションが可能になります。

- @RangePartitioning: オブジェクト(オブジェクトのID、場所、テナントなど)からのフィールド値によって、データベース・クラスタへのアクセスをパーティション化します。各サーバーは、値の範囲に割り当てられます。その値を持つオブジェクトに対するすべての書込みまたは読取り要求は、同じサーバーに送信されます。問合せにフィールドがパラメータとして含まれていない場合は、問合せをすべてのサーバーに送信して統合するか、セッションのデフォルトの動作のままにすることができます。

- @ReplicationPartitioning: 要求を一連の接続プール/ノードに送信します。このポリシーは、データベース・マシンのクラスタ間でデータをレプリケートするためのものです。変更問合せのみがレプリケートされます。

- @RoundRobinPartitioning: 要求をラウンドロビン方式で一連の接続プール/ノードに送信します。これは、データベース・マシンのクラスタ間で読取り問合せをロード・バランシングするためのものです。パーティション化をサポートしていないため、すべてのデータベースを各マシンでレプリケートする必要があります。データを読取り専用にするか、書込みをレプリケートする必要があります。

- @UnionPartitioning: 問合せをすべての接続プールに送信し、結果を統合します。これは、パーティション・リレーションシップ間のManyToManyなど、パーティション化を使用する際にパーティションに及ぶ問合せまたはリレーションシップのためのものです。

- @ValuePartitioning: オブジェクト(オブジェクトの場所またはテナントなど)からのフィールド値によって、データベース・クラスタへのアクセスをパーティション化します。各値は、特定のサーバーに割り当てられます。その値を持つオブジェクトに対するすべての書込みまたは読取り要求は、同じサーバーに送信されます。問合せにフィールドがパラメータとして含まれていない場合は、問合せをすべてのサーバーに送信して統合するか、セッションのデフォルトの動作のままにすることができます。

- @Partitioning: カスタム・パーティション・ポリシーによって、データベース・クラスタへのアクセスをパーティション化します。PartitioningPolicyクラスを指定および実装する必要があります。

パーティション・ポリシーは、永続性ユニットでグローバルに名付けられたオブジェクトで、複数のディスクリプタまたは問合せ間で再利用できます。特にJPA注釈とXMLを使用することによって、構成のユーザビリティが向上します。

永続性ユニット・プロパティは、読取り/書込み/シーケンスの既存の構成に加えて、名前付き接続プールの追加をサポートします。名前付き接続プールは、データベース・クラスタの各ノードに対して定義される必要があります。

トランザクションによって複数のパーティションからのデータが変更される場合、JTAを使用してデータの2フェーズ・コミットを確認する必要があります。1つのトランザクションに1つのノードのみが使用されるように、EntityManagerで排他接続を構成することもできます。

クラスタ化されたデータベースとOracle RAC

一部のデータベースでは、複数のマシン全体にわたるデータベースのクラスタリングがサポートされます。Oracle RACでは、単一のデータベースを複数の異なるサーバー・ノードに拡張できます。Oracle RACでは、表およびノードでデータのパーティション化もサポートされます。データベース・クラスタでは、クラスタ内の任意のノードからどのデータにもアクセスできます。ただし、一般的に、特定ノードへのデータ・アクセスをパーティション化し、ノード間の通信を削減することがより効率的です。

EclipseLinkのパーティション化をクラスタ・データベースと組み合せると、ノード間通信を減少させ、スケーラビリティを向上できます。

データベース・クラスタとともにパーティション化を使用する場合に必要なことは、次のとおりです。

- データベース・クラスタによってすべてのノードにデータを使用できるようになるため、パーティション・ポリシーでレプリケーションを有効にしないでください。

- データベース・クラスタはすべてのノードから完全な問合せ結果を戻すため、パーティション・ポリシーで統合を使用しないでください。

- データ・ソースおよびEclipseLinkの接続プールは、クラスタ内のノードごとに定義する必要があります。

- 各トランザクションが単一ノードへのアクセスのみを必要とするように、アプリケーションのデータ・アクセスおよびデータのパーティション化を設計する必要があります。

- 1つのトランザクションに複数のノードが含まれないようにするために、また2フェーズ・コミットを回避するために、EntityManagerの排他接続の使用をお薦めします。

例

例2-89に、従業員データを場所別にパーティション化する方法を示します。2つのプライマリ・サイト(オタワおよびトロント)は、異なるデータベースにそれぞれ格納されます。他のすべての場所は、デフォルトのデータベースに格納されます。プロジェクトは、例2-90に示すとおり、IDでレンジ・パーティション化されます。ID値の各範囲は、異なるデータベースに格納されます。従業員/プロジェクト・リレーションシップは、パーティション間リレーションシップの例です。従業員とプロジェクトを異なるデータベースに格納できるようにするには、統合ポリシーを使用して、統合表を各データベースにレプリケートします。

例2-89 パーティション化の使用

@Entity
@IdClass(EmployeePK.class)
@UnionPartitioning(
name="UnionPartitioningAllNodes",
replicateWrites=true)
@ValuePartitioning(
name="ValuePartitioningByLOCATION",
partitionColumn=@Column(name="LOCATION"),
unionUnpartitionableQueries=true,
defaultConnectionPool="default",
partitions={
@ValuePartition(connectionPool="node2", value="Ottawa"),
@ValuePartition(connectionPool="node3", value="Toronto")
})
@Partitioned("ValuePartitioningByLOCATION")
public class Employee {
@Id
@Column(name = "EMP_ID")
private Integer id;

@Id
private String location;
...

@ManyToMany(cascade = { PERSIST, MERGE })
@Partitioned("UnionPartitioningAllNodes")
private Collection<Project> projects;
...
}

例2-90 @RangePartitioningの使用

@Entity
@RangePartitioning(
name="RangePartitioningByPROJ_ID",
partitionColumn=@Column(name="PROJ_ID"),
partitionValueType=Integer.class,
unionUnpartitionableQueries=true,
partitions={
@RangePartition(connectionPool="default", startValue="0", endValue="1000"),
@RangePartition(connectionPool="node2", startValue="1000", endValue="2000"),
@RangePartition(connectionPool="node3", startValue="2000")
})
@Partitioned("RangePartitioningByPROJ_ID")
public class Project {
@Id
@Column(name="PROJ_ID")
private Integer id;
...
}

関連項目

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

- 「@Partitioning」

- 「@HashPartitioning」

- 「@PinnedPartitioning」

- 「@RangePartition」

- 「@ReplicationPartitioning」

- 「@RoundRobinPartitioning」

- 「@UnionPartitioning」

- 「@ValuePartitioning」

@Partitioning

@Partitioningを使用して、カスタムPartitioningPolicyを構成します。

注釈要素

表2-52は、この注釈の要素を示しています。

表2-52 @Partitioningの注釈要素

注釈要素

説明

デフォルト

name

パーティション・ポリシーの名前。名前は、永続性ユニットに一意である必要があります。

partitioningClass

(必須) PartitioningPolicyのサブクラスの完全なpackage.classの名前

使用方法

データのパーティション化により、アプリケーションは1つ以上のデータベース・マシン間でデータを増減できます。EclipseLinkでは、エンティティ・レベルでデータ・パーティション化がサポートされ、同じクラスのエンティティ・インスタンスの異なるセットを、異なる物理データベースまたはデータベース・クラスタ内の異なるノードに格納できます。通常のデータベースとクラスタ化されたデータベースの両方がサポートされています。データは、水平方向と垂直方向の両方でパーティション化できます。

エンティティ、リレーションシップ、問合せまたは永続性ユニットでパーティション化を有効にできます。

例

例2-91に、カスタム・パーティション・ポリシーを示します。

例2-91 @Partitioning注釈の使用

@Entity
@Partitioning(name="order", partitioningClass=OrderPartitioningPolicy.class)
@public class Order {
...
}

public class OrderPartitioningPolicy extends PartitioningPolicy {

public List<Accessor> getConnectionsForQuery(AbstractSession session, DatabaseQuery query, AbstractRecord arguments) {

List<Accessor> accessors = new ArrayList<Accessor>(1);
accessors.add(getAccessor(ACMEPool.leastBusy(), session, query, false));
return accessors;
}
}

関連項目

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

- 「@Partitioned」

- 「@HashPartitioning」

- 「@PinnedPartitioning」

- 「@RangePartitioning」

- 「@ReplicationPartitioning」

- 「@RoundRobinPartitioning」

- 「@UnionPartitioning」

- 「@ValuePartitioning」

- 「partitioning」

@PinnedPartitioning

@PinnedPartitionPolicyを使用して、単一の接続プールへの要求を固定し、垂直パーティションを可能にします(つまり、エンティティ、問合せまたはセッションが常に単一データベースにアクセスするようにします)。

注釈要素

表2-53は、この注釈の要素を示しています。

表2-53 @PinnedPartitioningの注釈要素

注釈要素

説明

デフォルト

connectionPool

問合せを固定する接続プールの名前

name

パーティション・ポリシーの名前。名前は、永続性ユニットに一意である必要があります。

使用方法

パーティション・ポリシーは、再利用できるようにグローバルに名付けられます。@Partitioned注釈を使用してパーティション・ポリシーを設定する必要もあります。

エンティティ、リレーションシップ、問合せまたはセッション/永続性ユニットで@PinnedPartitioningを指定できます。

永続性ユニット・プロパティは、読取り/書込み/シーケンスの既存の構成に加えて、名前付き接続プールの追加をサポートします。名前付き接続プールは、データベース・クラスタの各ノードに対して定義される必要があります。

トランザクションによって複数のパーティションからのデータが変更される場合、JTAを使用してデータの適切な2フェーズ・コミットを確認する必要があります。1つのトランザクションに1つのノードのみが使用されるように、EntityManagerで排他接続を構成することもできます。

例

EclipseLinkを使用したパーティション化の例は、「パーティション化の使用」を参照してください。

関連項目

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

- 「@Partitioned」

@PLSQLParameter

NamedPLSQLStoredProcedureQuery注釈またはPLSQLRecord注釈内で@PLSQLParameterを使用します。

注釈要素

表2-54は、この注釈の要素を示しています。

表2-54 @PLSQLParameterの注釈要素

注釈要素

説明

デフォルト

name

(必須)問合せパラメータ名。

direction

(オプション)ストアド・プロシージャ・パラメータの方向。

- IN: 入力パラメータ。

- IN_OUT: 入出力パラメータ。

- OUT: 出力パラメータ。

- OUT_CURSOR: 出力カーソル。

IN

databaseType

(オプション)パラメータのデータベース・データ型。OraclePLSQLTypesまたはJDBCTypesで定義されたタイプ定数、またはカスタム・レコード名か表タイプ名のいずれかになります。

長さ

(オプション)フィールド値の最大長

name

(オプション)ストアド・プロシージャ・パラメータの名前。

optional

(オプション)パラメータが必須かオプションか、プロシージャでデフォルト設定されるかどうかを指定します。

false

scale

(オプション)最大精度値

precision

(オプション)最大精度値

使用方法

@PLSQLParameter注釈を使用して、Oracle PLSQLストアド・プロシージャのパラメータおよびタイプと、通常のSQLタイプではなく拡張されたPLSQLタイプを使用するレコード・タイプを構成します。PLSQL RECORD、TABLE、BOOLEANおよびその他の拡張PLSQLタイプがサポートされています。

例

@PLSQLParameterの使用例は、「@NamedPLSQLStoredProcedureQuery」を参照してください。

関連項目

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

- 「@NamedPLSQLStoredProcedureQuery」

- 「@PLSQLRecord」

@PLSQLRecord

@PLSQLRecordを使用して、PLSQLプロシージャ内で使用するデータベースPLSQL RECORDタイプを定義します。

注釈要素

表2-55は、この注釈の要素を示しています。

表2-55 @PLSQLRecordの注釈要素

注釈要素

説明

デフォルト

name

(必須)データベースの表の名前

compatibileType

(必須)レコードの構造をミラーリングするデータベースOBJECTYPEの名前

fields

(必須)レコード・タイプのフィールド

javaType

(オプション)オブジェクト・タイプのクラス@Struct注釈を使用してこのクラスをマップする必要があります。

使用方法

Oracle PLSQL RECORDタイプは、構造化されたデータベース・タイプです。JDBCはこれらのタイプを戻すメカニズムを提供していませんが、EclipseLinkはこれらのタイプからOBJECTタイプへの変換をサポートしています。データベースでOBJECTタイプを作成してRECORDタイプをミラーリングし、@PLSQLRecordのcompatibileTypeとして提供する必要があります。

RECORDをJavaクラスにマップしたり、Javaクラスを@Embeddableとしてマップしたり、@Struct注釈を使用してRECORDタイプをミラーリングするOBJECTタイプにJavaクラスをマップすることができます。

PLSQLストアド・プロシージャ問合せに対するパラメータとして、Javaクラスをコールしたり戻すことができます。

例

例2-92に、この注釈を使用する方法を示します。

例2-92 @PLSQLRecord注釈の使用

@NamedPLSQLStoredFunctionQuery(name="getEmployee", functionName="EMP_PKG.GET_EMP",
returnParameter=@PLSQLParameter(name="RESULT", databaseType="EMP_PKG.EMP_REC"))
@Embeddable
@Struct(name="EMP_TYPE", fields={"F_NAME", "L_NAME", "SALARY"})
@PLSQLRecord(name="EMP_PKG.EMP_REC", compatibleType="EMP_TYPE", javaType=Employee.class,
fields={@PLSQLParameter(name="F_NAME"), @PLSQLParameter(name="L_NAME"), @PLSQLParameter(name="SALARY", databaseType="NUMERIC_TYPE")})
public class Employee {
...
}

関連項目

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

- EclipseLinkの理解のストアド・プロシージャに関する項

- 「@NamedPLSQLStoredProcedureQuery」

- 「@PLSQLRecords」

- Oracle PL/SQL http://www.oracle.com/technetwork/database/features/plsql/index.html

@PLSQLRecords

@PLSQLRecordsを使用して、複数のPLSQLRecordを定義します。

注釈要素

表2-56は、この注釈の要素を示しています。

表2-56 @PLSQLRecordsの注釈要素

注釈要素

説明

デフォルト

value

(必須)名前付きPLSQLレコードの配列

例

この注釈の使用例は、「@PLSQLRecord」を参照してください。

関連項目

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

- EclipseLinkの理解のストアド・プロシージャに関する項

- 「@NamedPLSQLStoredProcedureQuery」

- 「@PLSQLRecord」

- Oracle PL/SQL http://www.oracle.com/technetwork/database/features/plsql/index.html

@PLSQLTable

@PLSQLTable注釈を使用して、データベースのPLSQL TABLEタイプを定義します。これはPLSQLプロシージャ・コール内で使用できます。

注釈要素

表2-57は、この注釈の要素を示しています。

表2-57 @PLSQLTableの注釈要素

要素

説明

デフォルト

name

(必須)データベースの表タイプの名前

compatibilityType

(必須)表構造をミラーするデータベースVARRAYタイプの名前。表とこのタイプとの変換は、JDBCを介して受け渡たしできるように行われます。

nestedType

(必須)表のタイプ(EMP_RECのTABLEなど)

VARCHAR_TYPE

javaType

(オプション) VARRAYをマップするJava Collectionクラス。このクラスには、任意の有効なCollection実装を指定できます。

ArrayList

isNestedTable

(オプション)非連想(ネストした)表を指定します。通常、この方法は、PL/SQLでコレクションのコンストラクタを生成する場合に使用します。連想配列(VARRAY)のコンストラクタと非連想(ネストした)表のコンストラクタは異なります。

false

例

例2-93 @PLSQLTable注釈の使用

@Named PLSQLStoredProcedureQuery(
name="getEmployee",
functionName="EMP_PKG.GET_EMP",
parameters={
@PLSQLParamter(
name="EMP_OUT",
direction=Direction.OUT,
databaseType="EMP_TABLE"
)
}
)
@Embeddable
@Struct(name="EMP_TYPE", fields={"F_NAME",
"L_NAME", "SALARY"})
@PLSQLTable(
name="EMP_PKG.EMP_TABLE",
compatibilityType="EMP_VARRAY",
nestedType="EMP_REC"
)
public class Employee{...}

関連項目

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

- 「@NamedPLSQLStoredProcedureQuery」

@PLSQLTables

@PLSQLTables注釈を使用して、複数のPLSQL表を定義します。

注釈要素

表2-58は、この注釈の要素を示しています。

表2-58 @PLSQLTablesの注釈要素

注釈

説明

デフォルト

value

(必須)名前付きPLSQL表の配列

例

この注釈の使用例は、「@PLSQLTable」を参照してください。

関連項目

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

- 「@PLSQLTable」

@PrimaryKey

@PrimaryKeyを使用して、IDの拡張構成を可能にします。

検証ポリシーを指定して、ゼロが有効なID値かどうかを指定できます。主キー列のセットも明確に指定できます。

注釈要素

表2-59は、この注釈の要素を示しています。

表2-59 @PrimaryKeyの注釈要素

注釈要素

説明

デフォルト

cacheKeyType

(オプション)キャッシュにオブジェクトを格納するキャッシュ・キー・タイプを構成します。このタイプには、単純なシングルトンIDの基本ID値または最適化されたCachedIdタイプを指定できます。この要素は次の値を受け取ります。

- ID_VALUE: この値は、単純なシングルトンID(long、int、Stringなど)にのみ使用できます。これは、単純なシングルトンIDのデフォルトです。

- CACHE_ID: コンポジット値と複合値を受け取るために最適化されたキャッシュ・キー・タイプ。これは、コンポジットIDまたは複合IDのデフォルトです。

- AUTO: このクラスに最適な内容でキャッシュ・キー・タイプが自動的に構成されます。

AUTO

columns

(オプション)主キー列を直接指定します。主キーに外部キー、継承識別子フィールド、埋込みフィールド、トランスフォーメーション・マップ済フィールドなどの基本以外のフィールドが含まれる場合、@Idのかわりに使用できます。

validation

(オプション)実行されるID検証を構成します。

- NULL: EclipseLinkは、0の値を0として解釈します。この設定により、主キーで0の値を使用できます。

- ZERO (デフォルト): EclipseLinkは、0をnullとして解釈します。

- NEGATIVE: EclipseLinkは、負の値をnullとして解釈します。

- NONE: EclipseLinkは、ID値を検証しません。

デフォルトでは、0は有効なID値ではなく、0 ID値を可能にするために使用できます。

ZERO

使用方法

デフォルトで、EclipseLinkは、nullを使用できないプリミティブ型(intやlongなど)で0をnullとして解釈するため、0は主キーにとって無効な値となります。@PrimaryKey注釈を使用してエンティティ・クラスに対してIdValidationを構成することによって、この設定を変更できます。eclipselink.id-validationプロパティを使用して、永続性ユニット全体に対してIdValidationを構成します。

validation要素を設定すると、EclipseLinkがIDを生成する方法にも影響します。新規IDは、無効なID(デフォルトでは、nullまたは0)に対してのみ生成されます。NONEに設定すると、IDの生成が無効になります。

例

例2-94に、この注釈を使用する方法を示します。

例2-94 @PrimaryKey注釈の使用

@PrimaryKey(validation=IdValidation.ZERO)
public class Employee implements Serializable, Cloneable {
...
}

例2-95に、eclipselink-orm.xmlファイルの<primary-key>要素を使用する方法を示します。

例2-95 @<primary-key> XMLの使用

<entity name="Employee" class="foo.Employee" access="PROPERTY">
<primary-key validation="ZERO"/>
...
</entity>

関連項目

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

- 「id-validation」

- 「エンティティ注釈」

@PrivateOwned

@PrivateOwnedを使用して、リレーションシップが私有されることを指定します。ターゲット・オブジェクトは、ソース・オブジェクトの依存部分であり、その他のオブジェクトから参照されず、単独では存在できません。

注釈要素

@PrivateOwned注釈に属性はありません。

使用方法

@PrivateOwnedを使用すると、多くの操作が、削除、挿入、リフレッシュ、ロック(カスケードされる場合)を含むリレーションシップ間でカスケードされます。コレクションから除去されるプライベート・オブジェクトが削除され、追加されるオブジェクトが挿入されたことも確認します。

@OneToOne、@OneToManyおよび@VariableOneToOne注釈とともに@PrivateOwnedを指定できます。私有は、@BasicCollectionおよび@BasicMap注釈で暗黙的に示されます。

参照先のオブジェクトが私有されている場合、参照先の子オブジェクトは親オブジェクトなしでは存在できません。

追加情報

リレーションシップが私有されていることを示すと、次のことを示していることになります。

- 私有されたリレーションシップのソースが削除されると、EclipseLinkはターゲットを削除します。これは、@CascadeOnDeleteの設定に相当します。

- ソースからのターゲットの参照が削除されると、EclipseLinkはターゲットを削除します。

通常、共有される可能性のあるオブジェクトに私有されたリレーションシップは構成しないでください。オブジェクトがプライベートに所有されたリレーションシップでターゲットになっている場合は、そのオブジェクトを複数のリレーションシップでターゲットにしないでください。

注意:
私有されたオブジェクトへの参照を「クリーンアップ」することはアプリケーションの責任になるため、私有されたオブジェクトを参照すると望ましくない影響が生じる可能性があります。
オブジェクトを参照解除して削除すると、削除されたオブジェクトを引き続き参照するキャッシュ内のその他のオブジェクトによって制約違反が発生したり、オブジェクトが復活したり(カスケード永続化を使用する場合)、データベースの内容が反映されなくなる可能性があります。

例

例2-96に、@PrivateOwnedを使用してEmployeeフィールドのphoneNumbers.を指定する方法を示します。

例2-96 @PrivateOwned注釈の使用

@Entity
public class Employee implements Serializable {
...
@OneToMany(cascade=ALL, mappedBy="employee")
@PrivateOwned
public Collection<PhoneNumber> getPhoneNumbers() {
return phoneNumbers;
}
...
}

関連項目

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

- 「@CascadeOnDelete」

@Properties

@Propertyを使用して、マップ済属性またはget/setメソッドに単一のユーザー定義済プロパティを指定します。@Properties注釈を使用して、複数のプロパティをラップします。

EclipseLinkでは使用されませんが、アプリケーションまたは拡張機能でEclipseLinkメタデータを拡張する必要がある場合は、マッピング・プロパティを指定できます。

注釈要素

表2-60は、この注釈の要素を示しています。

表2-60 @Propertiesの注釈要素

注釈要素

説明

デフォルト

Property

Property要素の配列

使用方法

エンティティ、MappedSuperclassまたは埋込みクラス内のマップ済属性(またはget/setメソッド)に@Propertyを指定できます。エンティティ、MappedSuperclassまたは埋込み可能クラスにもこの注釈を指定できます。

MappedSuperclassに定義されたプロパティは、すべての継承エンティティおよびMappedSuperclassに渡されます。競合する場合は、クラスに直接定義されたプロパティがクラスの親から継承された値よりも常に優先されます。

orm.xmlマッピング・ファイルを使用すると、EclipseLinkは、マップ済属性の注釈で指定された@Propertyおよび@Propertiesを無視します。クラスの注釈は、orm.xmlファイルに指定された注釈にマージされ、競合している場合はファイルに指定された注釈が優先されます。

例

例2-120に、@Transformationマッピング内で@Properties注釈を使用する方法を示します。例2-121に、orm.xmlファイル内の<properties> XML要素を使用する方法を示します。

関連項目

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

- 「@Property」

@Property

@Propertyを使用して、マップ済属性またはget/setメソッドに単一のユーザー定義済プロパティを指定します。@Properties注釈を使用して、複数のプロパティをラップします。

注釈要素

表2-61は、この注釈の要素を示しています。

表2-61 @Propertyの注釈要素

注釈要素

説明

デフォルト

name

(必須)プロパティの名前。

value

(必須)プロパティのvalueの文字列表現。valueTypeのインスタンスに変換されます。

valueType

(オプション)プロパティの値タイプ。ConversionManagerによってvalueTypeに変換されます。ConversionManagerで処理できる単純なタイプである必要があります。

String

使用方法

エンティティ、MappedSuperclassまたは埋込みクラス内のマップ済属性(またはget/setメソッド)に@Propertyを指定できます。エンティティ、MappedSuperclassまたは埋込み可能クラスにもこの注釈を指定できます。

MappedSuperclassに定義されたプロパティは、すべての継承エンティティおよびMappedSuperclassに渡されます。競合する場合は、クラスに直接定義されたプロパティがクラスの親から継承された値よりも常に優先されます。

orm.xmlマッピング・ファイルを使用すると、EclipseLinkは、マップ済属性の@Property注釈および@Properties注釈を無視します。クラスの注釈は、orm.xmlファイルに指定された注釈にマージされ、競合している場合はファイルに指定された注釈が優先されます。

例

例2-120に、@Transformationマッピング内で@Property注釈を使用する方法を示します。例2-121に、orm.xmlファイル内の<property> XML要素を使用する方法を示します。

関連項目

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

- 「@Properties」

@QueryRedirectors

@QueryRedirectorsを使用して、前処理および後処理、リダイレクト、または監査などの一部の副次的影響の実行に対するEclipseLink問合せをインターセプトします。

注釈要素

表2-62は、この注釈の要素を示しています。

表2-62 @QueryRedirectorsの注釈要素

注釈要素

説明

デフォルト

allQueries

このAllQueries問合せリダイレクタは、より正確なリダイレクタ(ReadObjectQueryリダイレクタなど)または問合せに直接設定されたリダイレクタを持たない実行中のオブジェクト問合せに適用されます。

void.class

delete

デフォルトのDeleteオブジェクト問合せリダイレクタは、問合せに直接設定されたリダイレクタを持たない実行中のDeleteObjectQueryまたはDeleteAllQueryに適用されます。

void.class

insert

デフォルトのInsert問合せリダイレクタは、問合せに直接設定されたリダイレクタを持たない実行中のInsertObjectQueryに適用されます。

void.class

readAll

デフォルトのReadAll問合せリダイレクタは、問合せに直接設定されたリダイレクタを持たない実行中のReadAllQueryに適用されます。

getResultList() APIを介してJPA問合せを実行しているユーザーの場合、このリダイレクタが起動されます。

void.class

readObject

デフォルトのReadObject問合せリダイレクタは、問合せに直接設定されたリダイレクタを持たない実行中のReadObjectQueryに適用されます。

getSingleResult() APIまたはEntityManager.find()を介してJPA問合せを実行しているユーザーの場合、このリダイレクタが起動されます。

void.class

report

デフォルトのReportQueryリダイレクタは、問合せに直接設定されたリダイレクタを持たない実行中のReportQueryに適用されます。

集計関数を含む、または複数のエンティティを選択するJPA問合せを実行しているユーザーの場合、このリダイレクタが起動されます。

void.class

update

デフォルトのUpdate問合せリダイレクタは、問合せに直接設定されたリダイレクタを持たない実行中のUpdateObjectQueryまたはUpdateAllQueryに適用されます。EclipseLinkでは、UpdateObjectQueryは、データ・ソースへの変更をフラッシュするたびに実行されます。

void.class

使用方法

@QueryRedirectorsを使用して、標準のEclipseLink問合せ機能を拡張します。

QueryRedirectorを問合せヒントeclipselink.query.redirectorを介して設定するか、エンティティのデフォルトのリダイレクタとして設定できます。

QueryRedirectorsは、TopLink Gridを統合して、問合せをCoherence Gridにリダイレクトする際に使用されます。

例

例2-97に、この注釈を使用する方法を示します。

例2-97 @QueryRedirectors注釈の使用

@QueryRedirectors(
allQueries=org.queryredirectors.AllQueriesForEntity.class)
@Entity
public class
...

関連項目

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

- EclipseLinkの理解のデータベース問合せに関する項

@RangePartition

@RangePartitionを使用して、接続プールに特定のレンジ・パーティションを作成します。範囲内の値は、指定の接続プールにルーティングされます。

注釈要素

表2-63は、この注釈の要素を示しています。

表2-63 @RangePartitionの注釈要素

注釈要素

説明

デフォルト

connectionPool

指定された範囲の問合せをルーティングするための接続プール

startValue

範囲開始値のString表現

endValue

範囲終了値のString表現

例

EclipseLinkを使用したパーティション化の例は、「@RangePartitioningの使用」を参照してください。

関連項目

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

- 「@Partitioned」

@RangePartitioning

@RangePartitioningを使用して、オブジェクト(オブジェクトのID、場所、テナントなど)からのフィールド値によって、データベース・クラスタへのアクセスをパーティション化します。

EclipseLinkは、各サーバーに値の範囲を割り当てます。サーバーの値を持つオブジェクトに対するすべての書込みまたは読取り要求は、特定サーバーに送信されます。問合せにフィールドがパラメータとして含まれていない場合は、問合せをすべてのサーバーに送信して統合するか、セッションのデフォルトの動作のままにすることができます。

注釈要素

表2-64は、この注釈の要素を示しています。

表2-64 @RangePartitioningの注釈要素

注釈要素

説明

デフォルト

name

(必須)パーティション・ポリシーの名前。永続性ユニット内に対して一意である必要があります。

partitionColumn

(必須)問合せをパーティション化するためのデータベース列または問合せパラメータ。これは表列名であり、クラス属性名ではありません。列値は、問合せに含まれている必要があり、通常はオブジェクトIDの一部です。

これは、問合せパラメータの名前にもなります。問合せにフィールドが含まれていない場合、問合せはパーティション化されません。

partitions

(必須)パーティション化する接続プール名のリスト

partitionValueType

開始値および終了値のタイプ

String

unionunpartionableQueries

パーティション・フィールドを含まない問合せをすべてのデータベースに送信し、結果を統合するかどうかを定義します。

false

使用方法

エンティティ、リレーションシップ、問合せまたはセッション/永続性ユニットでパーティション化を有効にできます。

パーティション・ポリシーは、再利用できるようにグローバルに名付けられ、@Partitioned注釈を使用して設定される必要もあります。

永続性ユニット・プロパティは、読取り/書込み/シーケンスの既存の構成に加えて、名前付き接続プールの追加をサポートします。名前付き接続プールは、データベース・クラスタの各ノードに対して定義される必要があります。

トランザクションによって複数のパーティションからのデータが変更される場合、JTAを使用してデータの適切な2フェーズ・コミットを確認する必要があります。1つのトランザクションに1つのノードのみが使用されるように、EntityManagerで排他接続を構成することもできます。

例

例2-98に、@RangePartitioning注釈を使用する方法を示します。

例2-98 @RangePartitioning注釈の使用

@Entity
@Table(name="PART_PROJECT")
@RangePartitioning(
name="RangePartitioningByPROJ_ID",
partitionColumn=@Column(name="PROJ_ID"),
partitionValueType=Integer.class,
unionUnpartitionableQueries=true,
partitions={
@RangePartition(connectionPool="default", startValue="0", endValue="1000"),
@RangePartition(connectionPool="node2", startValue="1000", endValue="2000"),
@RangePartition(connectionPool="node3", startValue="2000")
})
@Partitioned("RangePartitioningByPROJ_ID")
public class Project implements Serializable {
...
}

例2-98に、eclipselink-orm.xmlファイルの<range-partitioning>要素を使用する方法を示します。

例2-99 <range-partitioning> XMLの使用

<entity name="Project" class="Project" access="FIELD">
<table name="PART_PROJECT"/>
<range-partitioning name="RangePartitioningByPROJ_ID" partition-value-type="java.lang.Integer" union-unpartitionable-queries="true">
<partition-column name="PROJ_ID"/>
<partition connection-pool="default" start-value="0" end-value="1000"/>
<partition connection-pool="node2" start-value="1000" end-value="2000"/>
<partition connection-pool="node3" start-value="2000"/>
</range-partitioning>
<partitioned>RangePartitioningByPROJ_ID</partitioned>
</entity>

関連項目

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

- 「@RangePartition」

- 「@Partitioned」

@ReadOnly

@ReadOnlyを使用して、クラスが読取り専用であることを指定します。

注釈要素

この注釈に要素は含まれません。

使用方法

エンティティまたはMappedSuperclassに定義できます。

継承の場合、@ReadOnly注釈は継承階層のルートにのみ定義できます。

@ReadOnlyを使用し、EclipseLinkの永続性コンテキストをバイパスしてヒープ領域を節約することもできます(大規模データセットをロードする必要がある場合など)。

注意:
読取り専用エンティティは変更しないでください。変更すると、EclipseLinkのキャッシュが破損する可能性があります。読取り専用エンティティを変更するには、クローニングまたはシリアライズされる必要があります。

例

例2-100に、この注釈を使用する方法を示します。

例2-100 @ReadOnly注釈の使用

@ReadOnly
@Entity
@Table(name = "TMP_READONLY")
public class ReadOnlyEntity {
...
}

例2-101に、eclipselink-orm.xmlファイルの<read-only>要素を使用する方法を示します。

例2-101 <read-only> XMLの使用

<entity name="XMLReadOnlyClass" class="ReadOnlyClass" access="PROPERTY" read-only="true">

関連項目

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

- 「エンティティ注釈」

@ReadTransformer

トランスフォーメーション・マッピングとともに@ReadTransformerを使用して、データベース列値から属性値への変換を定義します(マッピングが書込み専用ではない場合)。

注釈要素

表2-65は、この注釈の要素を示しています。

表2-65 @ReadTransformerの注釈要素

注釈要素

説明

デフォルト

method

マップされるクラスにはこの名前を持つメソッドが必要で、(属性に値を割り当てるのではなく)属性に割り当てられる値を戻します。

transformerClass

org.eclipse.persistence.mappings.transformers.AttributeTransformerインタフェースを実装するユーザー定義済クラス。

クラスはインスタンス化され、そのbuildAttributeValueを使用して属性に割り当てられる値が作成されます。

void.class

注意:
methodまたはtransformerClassのいずれか(両方ではない)を指定する必要があります。

使用方法

読取り専用マッピングではない場合も、@WriteTransformer注釈または@WriteTransformers注釈のいずれかを指定する必要があります。各WriteTransformerは、属性値から単一データベース列値への変換を定義します(列はWriteTransformerで指定されます)。

例

トランスフォーメーション・マッピングとともに@WriteTransformer注釈を使用する方法の例は、「@Transformation注釈の使用」を参照してください。

関連項目

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

- 「@Transformation」

- 「@WriteTransformer」

@ReplicationPartitioning

@ReplicationPartitioningを使用して、要求を一連の接続プールに送信します。これは、データベース・マシンのクラスタ間でデータをレプリケートするためのものです。変更問合せのみがレプリケートされます。

注釈要素

表2-66は、この注釈の要素を示しています。

表2-66 @ReplicationPartitioningの注釈要素

注釈要素

説明

デフォルト

name

パーティション・ポリシーの名前。永続性ユニット内に対して一意である必要があります。

connectionPools

レプリケートする接続プール名のリスト

ServerSessionのすべての定義済プール

使用方法

エンティティ、リレーションシップ、問合せまたはセッション/永続性ユニットでパーティション化を有効にできます。

パーティション・ポリシーは、再利用できるようにグローバルに名付けられ、@Partitioned注釈を使用して設定される必要もあります。

永続性ユニット・プロパティは、読取り/書込み/シーケンスの既存の構成に加えて、名前付き接続プールの追加をサポートします。名前付き接続プールは、データベース・クラスタの各ノードに対して定義される必要があります。

トランザクションによって複数のパーティションからのデータが変更される場合、JTAを使用してデータの適切な2フェーズ・コミットを確認する必要があります。1つのトランザクションに1つのノードのみが使用されるように、EntityManagerで排他接続を構成することもできます。

例

EclipseLinkを使用したパーティション化の例は、「パーティション化の使用」を参照してください。

関連項目

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

- 「@Partitioned」

@ReturnInsert

@ReturnInsertを使用して、INSERT操作で書込み中のオブジェクトに値を戻します。これにより、表のデフォルト値、トリガー、またはストアド・プロシージャの計算された値をオブジェクトに戻して設定できます。

注意:
戻りは、Oracle Databaseでのみサポートされ、INSERT RETURNING句が必要です。
他のデータベースで戻りを使用する場合、出力パラメータを持つストアド・プロシージャを挿入問合せに使用します。

注釈要素

表2-67は、この注釈の要素を示しています。

表2-67 @ReturnInsertの注釈要素

注釈要素

説明

デフォルト

returnOnly

(オプション)指定した場合(trueの場合)、マッピング・フィールドはSQL生成中にINSERT句から除外されます。

false

使用方法

@ReturnInsert注釈は、Basicマッピングにのみ指定できます。

例

例2-102に、@ReturnInsert注釈を使用する方法を示します。引数を使用しない場合、EclipseLinkはデフォルト値falseを受け入れます。

例2-102 @ReturnInsert注釈の使用

@ReturnInsert(returnOnly=true)
public String getFirstName() {
return firstName;
}

例2-103に、eclipselink-orm.xmlファイルの<return-insert>要素を使用する方法を示します。

例2-103 <return-insert> XMLの使用

<basic name="firstName">
<column name="FIRST_NAME"/>
<return-insert read-only="true"/>
</basic>

関連項目

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

- 「@ReturnUpdate」

- EclipseLinkの理解

@ReturnUpdate

@ReturnUpdateを使用して、UPDATE操作で書込み中のオブジェクトに値を戻します。これにより、表のデフォルト値、トリガー、またはストアド・プロシージャの計算された値をオブジェクトに戻して設定できます。

注意:
戻りは、Oracle Databaseでのみサポートされ、INSERT RETURNING句が必要です。
他のデータベースで戻りを使用する場合、出力パラメータを持つストアド・プロシージャを挿入問合せに使用します。

注釈要素

この注釈に要素は含まれません。

使用方法

@ReturnUpdate注釈は、Basicマッピングにのみ指定できます。

例

例2-104に、@ReturnUpdate注釈を使用する方法を示します。この注釈は、引数を受け入れません。

例2-104 @ReturnUpdate注釈の使用

@ReturnUpdate
public String getFirstName() {
return firstName;
}

例2-105に前と同じ例を示しますが、eclipselink-orm.xmlマッピング・ファイルの<return-update>要素を使用します。

例2-105 <return-update> XMLの使用

<basic name="firstName">
<column name="F_NAME"/>
<return-update/>
</basic>

関連項目

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

- 「@ReturnInsert」

- EclipseLinkの理解

@RoundRobinPartitioning

@RoundRobinPartitioningを使用して、要求をラウンド・ロビン方式で一連の接続プールに送信します。

注釈要素

表2-68は、この注釈の要素を示しています。

表2-68 @RoundRobinPartitioningの注釈要素

注釈要素

説明

デフォルト

name

(必須)パーティション・ポリシーの名前。名前は、永続性ユニットに一意である必要があります。

connectionPools

(オプション)ロード・バランシングする接続プール名のリスト

ServerSessionのすべての定義済プール

replicateWrite

(オプション)これにより、一連のデータベースを書込み、同期を保持し、データベース間で読取りをロード・バランシングすることができます。

false

使用方法

@RoundRobinPartitioning注釈を使用して、データベース・マシンのクラスタ間で読取り問合せをロード・バランシングします。@RoundRobinPartitioningを使用するには、すべてのデータベースを各マシンでレプリケートする必要があります。

データを読取り専用にするか、データベースで書込みをレプリケートする必要があります。

永続性ユニット・プロパティは、読取り/書込み/シーケンスの既存の構成に加えて、名前付き接続プールの追加をサポートします。名前付き接続プールは、データベース・クラスタの各ノードに対して定義される必要があります。

トランザクションによって複数のパーティションからのデータが変更される場合、JTAを使用してデータの適切な2フェーズ・コミットを確認する必要があります。1つのトランザクションに1つのノードのみが使用されるように、EntityManagerで排他接続を構成することもできます。

例

EclipseLinkを使用したパーティション化の例は、「@Partitioned」を参照してください。

関連項目

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

- 「@Partitioned」

@SerializedObject

@SerializedObject注釈を使用して、org.eclipse.persistence.descriptors.SerializedObjectPolicyインスタンスをEntityオブジェクトまたはMappedSuperClassオブジェクトに設定します。シリアライズ・オブジェクト・ポリシーが指定されている場合、エンティティ・オブジェクト全体が、私有された(およびネストされた私有の)エンティティと要素コレクションを使用してデータベースの追加フィールドに書き込まれます。

注釈要素

表2-69は、この注釈の要素を示しています。

表2-69 @SerializedObjectの注釈要素

注釈要素

説明

デフォルト

column

(オプション)シリアライズ・オブジェクトを保持する列

エンティティのメイン表でSOPの名前が付いたBLOB列。

value

(必須) SerializedObjectPolicyインタフェースを
実装するClass

使用方法

@SerializedObject注釈を使用して、データベースから高速にデータを読み取ります。この使用法の短所は、データベースへの書込みが遅くなる点です。読取り専用またはほとんどが読取りのアプリケーションでは、エンティティと要素コレクションにシリアライズ・オブジェクト・ポリシーを使用します。

シリアライズ・オブジェクトにnullまたは廃止されたバージョンのオブジェクトが含まれる場合、シリアライズ・オブジェクト・ポリシーを使用している問合せは例外をスローするか、他のフィールドすべてが同様に読み込まれている場合は、これらのフィールドを使用してオブジェクトを構築します(シリアライズ・オブジェクト・ポリシーが使用されていない場合も同様)。

注意:
現時点で、SerializedObjectPolicyインタフェースのデフォルト実装はありません。このクラスを作成する必要があります。

例

例2-106に、@SerializedObject注釈を使用してシリアライズ・オブジェクト・ポリシーを指定する方法およびデフォルトの列名をオーバーライドする方法を示します。

例2-106 シリアライズ・オブジェクト・ポリシーの指定

@Entity
@SerializedObject(MySerializedPolicy.class);
public class Employee {...

@Entity
@SerializedObject(value = MySerializedObjectPolicy.class, column = @Column(name = "SERIALIZED"));
public class Address (...

エンティティ・オブジェクトに@SerializedObject注釈が設定されている場合、検索やリフレッシュに加えて、そのオブジェクトを返す読取り問合せでは、デフォルトでそのシリアライズ・オブジェクト・ポリシーが使用されます。

例2-107に、問合せでシリアライズ・オブジェクト・ポリシーの使用を回避する方法を示します。

例2-107 問合せでのシリアライズ・オブジェクト・ポリシーの使用の回避

Query query = em.createQuery("SELECT e FROM Employee e")
.setHint(QueryHints.SERIALIZED_OBJECT, "false");

例2-108に、シリアライズ・オブジェクト・ポリシー・プロパティを使用して、シリアライズ・オブジェクトの検索を回避する方法を示します。

例2-108 シリアライズ・オブジェクト・プロパティを使用した検索の回避

Map hints = new HashMap();
hints.put("eclipselink.serialized-object", "false");
Address address = em.find(Address.class, id, hints);

関連項目

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

- SerializedObjectPolicy

@StoredProcedureParameter

NamedStoredProcedureQuery注釈内で@StoredProcedureParameterを使用します。

注釈要素

表2-70は、この注釈の要素を示しています。

表2-70 @StoredProcedureParameterの注釈要素

注釈要素

説明

デフォルト

queryParameter

(必須)問合せパラメータ名。

direction

(オプション)ストアド・プロシージャ・パラメータの方向。

- IN: 入力パラメータ。

- IN_OUT: 入出力パラメータ。

- OUT: 出力パラメータ。

- OUT_CURSOR: 出力カーソル。

IN

jdbcType

(オプション) JDBCタイプ・コード。プロシージャから戻されるタイプに依存します。

-1

jdbcTypeName

(オプション) JDBCタイプ名。ARRAYまたはSTRUCTタイプに必要な場合があります。

name

(オプション)ストアド・プロシージャ・パラメータの名前。

optional

(オプション)パラメータが必須かオプションか、プロシージャでデフォルト設定されるかどうかを指定します。

false

type

(オプション)プロシージャから戻されるJavaクラスのタイプ。プロシージャから戻されるtypeに依存します。

void.class

例

@StoredProcedureParameter注釈の使用例は、「@NamedStoredProcedureQuery」を参照してください。

関連項目

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

- 「@NamedStoredProcedureQuery」

@Struct

@Structを使用して、データベースのStruct型にマップするクラスを定義します。通常、埋込み可能クラスである必要がありますが、オブジェクト表に格納される場合はエンティティも可能です。

注釈要素

表2-71は、この注釈の要素を示しています。

表2-71 @Structの注釈要素

注釈要素

説明

デフォルト

name

(必須)データベース構造型のデータベース名

fields

(オプション)データベース構造型に含まれるフィールドの順序を定義します。

使用方法

Struct型は、一部のデータベースでサポートされる拡張オブジェクト・リレーショナル・データ型です。Struct型は、OracleのOBJECT型など、データベースのユーザー定義型です。Structには通常、Arrays (VARRAY)型またはその他のStruct型が含まれ、Structは列または表に格納できます。

Struct型を使用して、Oracle DatabaseでRECORD型を使用するPL/SQLストアド・プロシージャをコールすることもできます。

例

例2-109に、@Struct注釈を使用してOBJECT型にマップするJavaクラスを定義する方法を示します。

例2-109 @Struct注釈の使用

@Embeddable
@Struct(name="EMP_TYPE", fields={"F_NAME", "L_NAME", "SALARY"})
public class Employee {
@Column(name="F_NAME")
private String firstName;
@Column(name="L_NAME")
private String lastName;
@Column(name="SALARY")
private BigDecimal salary;
...
}

例2-110に、eclipselink-orm.xmlファイルの<struct>要素を使用する方法を示します。

例2-110 <struct> XMLの使用

<embeddable class="Address" access="FIELD">
<struct name="PLSQL_P_PLSQL_ADDRESS_REC">
<field>ADDRESS_ID</field>
<field>STREET_NUM</field>
<field>STREET</field>
<field>CITY</field>
<field>STATE</field>
</struct>
<attributes>
<basic name="id">
<column name="ADDRESS_ID"/>
</basic>
<basic name="number">
<column name="STREET_NUM"/>
</basic>
</attributes>
</embeddable>

関連項目

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

- 「@Structure」

@StructConverter

@StructConverterを使用して、空間データ型などの複雑なデータベース・タイプを処理するjava.sql.Structタイプのカスタム処理を有効にします。

EclipseLinkには、Oracle JGeometry空間データ型を変換するJGeometryConverterクラスが含まれています。

注意:
他のコンバータとは異なり、@StructConverterには独自のインタフェースがあります。

注釈要素

表2-72は、この注釈の要素を示しています。

表2-72 @StructConverterの注釈要素

注釈要素

説明

デフォルト

name

コンバータのStringの名前。この名前が永続性ユニットで一意であることを確認します。

なし

converter

Stringとしてのコンバータ・クラス。このクラスは、org.eclipse.persistence.platform.database.converters.StructConverterインタフェースを実装する必要があります。

なし

使用方法

値属性がStructConverter名に設定されている既存の@Convert注釈を使用できます。この場合、適切な設定がマッピングに適用されます。この設定は、StructConverterが定義されているタイプを使用するすべてのマッピングに必要です。@Convertを使用したマッピングの構成に失敗すると、エラーが発生します。

EclipseLinkには、@ObjectTypeConverterや@TypeConverterなどのその他のコンバータも含まれます。

例

例2-111に、@StructConverter注釈を定義する方法を示します。

例2-111 @StructConverter注釈の使用

@StructConverter(
name="JGeometryConverter"
converter=JGeometryConverter.class.getName())

すべてのセッションの範囲でエンティティに@StructConverter注釈を指定できます。同じJavaタイプに影響する複数のStructConverter注釈を追加すると、例外がスローされます。@StructConverter注釈は、@Converterと同じネームスペースにあります。@Converterおよび同じ名前の@StructConverterを追加すると、検証の例外がスローされます。

関連項目

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

- 「@StructConverters」

@StructConverters

@StructConvertersを使用して、複数の@StructConverter注釈を定義します。

注釈要素

表2-73は、この注釈の要素を示しています。

表2-73 @StructConvertersの注釈要素

注釈要素

説明

デフォルト

StructConverter[]

(必須)構造コンバータの配列

例

例2-112に、@StructConverters注釈を使用して複数の@StructConverter要素を定義する方法を示します。

例2-112 @StructConverters注釈の使用

@StructConverters{{
@StructConverter(name="StructConverter1", converter="foo.StructConverter1"),
@StructConverter(name="StructConverter2", converter="foo.StructConverter2")
})

例2-113に、eclipselink-orm.xmlファイルの<struct-converters>要素を使用する方法を示します。

例2-113 <struct-converters> XMLの使用

<struct-converters>
<struct-converter name="StructConverter1" converter="foo.StructConverter1"/>
<struct-converter name="StructConverter2" converter="foo.StructConverter2"/>
</struct-converters>

関連項目

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

- 「@StructConverter」

@Structure

フィールド/メソッドで@Structureを使用して、埋込み可能なStruct型にStructureMappingを定義します。Struct注釈を使用して、ターゲットの埋込み可能クラスをマップする必要があります。

注釈要素

この注釈に要素は含まれません。

使用方法

Struct型は、一部のデータベースでサポートされる拡張オブジェクト・リレーショナル・データ型です。Struct型は、OracleのOBJECT型など、データベースのユーザー定義型です。Structには通常、Arrays (VARRAY)型またはその他のStruct型が含まれ、Structは列または表に格納できます。

例

例2-114に、@Structure注釈を使用する方法を示します。@Structを使用してターゲットをマップする例は、例2-109を参照してください。

例2-114 @Structure注釈の使用

@Structure
protected Address address;

<structure>要素を使用して、eclipselink-orm.xmlファイルの構造マッピングを定義することもできます。

例2-115 <structure> XMLの使用

<structure name="address"/>

関連項目

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

- 「@Struct」

@TenantDiscriminatorColumn

@TenantDiscriminator注釈は、@Multitenant注釈およびSINGLE-TABLEマルチテナント・タイプとともに使用され、永続性コンテキストが単一表マルチテナンシでアクセスできる対象を制限します。

注釈要素

表2-74は、この注釈の要素を示しています。

表2-74 @TenantDiscriminatorColumnのプロパティ

注釈要素

説明

デフォルト

java.lang.String columnDefinition

(オプション)識別子列のDDLを生成する際に使用されるSQLフラグメント

指定の識別子タイプの列を作成するプロバイダ生成SQL。

java.lang.String contextProperty

(オプション)テナント識別子列に適用されるコンテキスト・プロパティの名前

eclipselink.tenant-id

DiscriminatorType discriminatorType

(オプション)クラス識別子として使用するオブジェクト/列のタイプ

javax.persistence.DiscriminatorType.STRING

int length

(オプション)文字列ベースの識別子タイプの列長

文字列ベースの識別子タイプの列長。その他の識別子タイプでは無視されます。

java.lang.String name

(オプション)テナント識別子に使用される列の名前

TENANT_ID

boolean primaryKey

テナント識別子列が表の主キーの一部であることを指定します。

false

java.lang.String table

(オプション)列を含む表の名前

列を含む表の名前。存在しない場合、列はプライマリ表にあると想定されます。列がセカンダリ表にある場合は、この属性を指定する必要があります。

使用方法

単一表マルチテナンシを構成する場合は、次の両方を指定する必要があります。

- 次のとおり、@Multitenant注釈を使用して、単一表マルチテナンシを使用するためにエンティティまたはマップされたスーパークラスに注釈を付与します。

@Entity
@Table(name=”EMP”)
@Multitenant(SINGLE_TABLE)

SINGLE_TABLEは、指定されたエンティティに関連付けられている表(TableおよびSecondaryTable)をテナント間で共有できることを示します。

注意:
識別子列はプライマリ表にあると想定されるため、@Table注釈は必要ありません。ただし、識別子列がセカンダリ表に定義されている場合、@SecondaryTableを使用してその表を特定する必要があります。

- 次のとおり、@TenantDiscriminatorColumn注釈を使用して、識別子列として使用される列を指定します。

@Entity
@Table(name=”EMP”)
@Multitenant(SINGLE_TABLE)
@TenantDiscriminatorColumn(name = ”TENANT_ID”)

次のとおり、@TenantDiscriminatorColumns注釈を使用することにより、複数の識別子列を指定できます。

@Entity
@Table(name = "EMPLOYEE")
@Multitenant(SINGLE_TABLE)
@TenantDiscriminatorColumns({
@TenantDiscriminatorColumn(name = "TENANT_ID")
@TenantDiscriminatorColumn(name = "TENANT_CODE" contextProperty="eclipselink.tenant-code")})

識別子列の使用

次の特性が、識別子列に適用されます。

- 永続化する場合、テナント識別子列の値は、関連付けられたコンテキスト・プロパティから移入されます。

- テナント識別子列は、アプリケーションで定義できます。つまり、識別子列は、各共有エンティティ表の固有の列に関連付けられません。TENANT_ID、T_IDなどを使用できます。

- アプリケーションが定義できるテナント識別子列の数に制限はありません。

- 識別子列には任意の名前を使用できます。

- テナント識別子列は、常に@Multitenant(SINGLE_TABLE)とともに使用される必要があります。テナント識別子列のみを指定することはできません。

- 生成されたスキーマに指定のテナント識別子列を含めることができます。

- テナント識別子列をマップまたはマップ解除できます。

- テナント識別子列がマップされる場合、関連付けられたマッピング属性は読取り専用としてマークする必要があります。この制限により、テナント識別子列をエンティティIDの一部にすることはできず、データベースの主キー仕様の一部にすることだけが可能になります。

- SELECT問合せを発行する場合、マップされたプロパティとマップ解除されたプロパティの両方を使用して追加基準を作成します。

継承階層での単一表マルチテナンシの使用

継承方針は、継承タイプを指定することによって構成されます(@javax.persistence.Inheritanceを参照してください)。単一表マルチテナンシは、次のとおり、継承階層で使用できます。

- SINGLE_TABLEまたはJOINED継承方針を使用する場合、マルチテナント・メタデータは継承階層のルート・レベルでのみ適用できます。

- TABLE_PER_CLASS継承階層内でもマルチテナント・メタデータを指定できます。この場合、すべてのエンティティに、すべてのマッピングデータが含まれた独自の表があります(SINGLE_TABLEまたはJOINED方針の場合はありません)。その結果、TABLE_PER_CLASS方針では、階層の一部のエンティティがマルチテナントになり、その他はマルチテナントにならない場合があります。エンティティを単一表に分離してタイプのみを構築することはできないため、その他の継承方針ではルート・レベルでマルチテナンシのみを指定できます。

例

表2-74に、テナント識別子列の多くの使用例を示します。

例2-116 @TenantDiscriminatorColumn注釈の使用

/** Single tenant discriminator column **/

@Entity
@Table(name = "CUSTOMER")
@Multitenant
@TenantDiscriminatorColumn(name = "TENANT", contextProperty = "multi-tenant.id")
public Customer() {
...
}

/** Multiple tenant discriminator columns using multiple tables **/

@Entity
@Table(name = "EMPLOYEE")
@SecondaryTable(name = "RESPONSIBILITIES")
@Multitenant(SINGLE_TABLE)
@TenantDiscriminatorColumns({
@TenantDiscriminatorColumn(name = "TENANT_ID", contextProperty = "employee-tenant.id", length = 20)
@TenantDiscriminatorColumn(name = "TENANT_CODE", contextProperty = "employee-tenant.code", discriminatorType = STRING, table = "RESPONSIBILITIES")
}
)
public Employee() {
...
}

/** Tenant discriminator column mapped as part of the primary key on the database **/

@Entity
@Table(name = "ADDRESS")
@Multitenant
@TenantDiscriminatorColumn(name = "TENANT", contextProperty = "tenant.id", primaryKey = true)
public Address() {
...
}

/** Mapped tenant discriminator column **/

@Entity
@Table(name = "Player")
@Multitenant
@TenantDiscriminatorColumn(name = "AGE", contextProperty = "tenant.age")
public Player() {
...

@Basic
@Column(name="AGE", insertable="false", updatable="false")
public int age;
}

例2-117に、eclipselink-orm.xmlファイルの<tenant-disciminator-column> XML要素を使用する同一マッピングを示します。

例2-117 <tenant-discriminator-column> XML注釈の使用

<!-- Single tenant discriminator column -->

<entity class="model.Customer">
<multitenant>
<tenant-discriminator-column name="TENANT context-property="multi-tenant.id""/>
</multitenant>
<table name="CUSTOMER"/>
...
</entity>

<!-- Multiple tenant discriminator columns using multiple tables -->

<entity class="model.Employee">
<multitenant type="SINGLE_TABLE">
<tenant-discriminator-column name="TENANT_ID" context-property="employee-tenant.id" length="20"/>
<tenant-discriminator-column name="TENANT_CODE" context-property="employee-tenant.id" discriminator-type="STRING" table="RESPONSIBILITIES"/>
</multitenant>
<table name="EMPLOYEE"/>
<secondary-table name="RESPONSIBILITIES"/>
...
</entity>

<!-- Tenant discriminator column mapped as part of the primary key on the database -->

<entity class="model.Address">
<multitenant>
<tenant-discriminator-column name="TENANT" context-property="multi-tenant.id" primary-key="true"/>
</multitenant>
<table name="ADDRESS"/>
...
</entity>

<!-- Mapped tenant discriminator column -->

<entity class="model.Player">
<multi-tenant>
<tenant-discriminator-column name="AGE" context-property="tenant.age"/>
</multi-tenant>
<table name="PLAYER"/>
...
<attributes>
<basic name="age" insertable="false" updatable="false">
<column name="AGE"/>
</basic>
...
</attributes>
...
</entity>

関連項目

- 「@Multitenant」

- 「@TenantDiscriminatorColumns」

- 「@TenantTableDiscriminator」

- EclipseLinkソリューション・ガイドのマルチテナンシの使用に関する項

@TenantDiscriminatorColumns

複数の@TenantDiscriminatorColumn注釈を含む@TenantDiscriminatorColumns注釈を使用して、複数の識別子列を単一表マルチテナンシに指定します。

注釈要素

表2-75は、この注釈の要素を示しています。

表2-75 @TenantDiscriminatorColumnsの注釈要素

注釈要素

説明

デフォルト

TenantDiscriminatorColumn value

(オプション) 1つ以上のTenantDiscriminatorColumn注釈

なし

使用方法

@TenantDiscriminatorColumns注釈を使用して複数の@TenantDiscriminatorColumnを含める必要があります。@TenantDiscriminatorColumns注釈を単独で使用することはできず、複数の@TenantDiscriminatorColumn注釈を@TenantDiscriminatorColumnsなしで単独で使用することはできません。

例

@Entity
@Table(name = "EMPLOYEE")
@Multitenant(SINGLE_TABLE)
@TenantDiscriminatorColumns({
@TenantDiscriminatorColumn(name = "TENANT_ID", contextProperty = ”tenant-id)
@TenantDiscriminatorColumn(name = "TENANT_CODE", contextProperty = ”tenant-code)})

@TenantDiscriminatorColumnsの詳細な例は、「@TenantDiscriminatorColumn」を参照してください。

関連項目

- 「@Multitenant」

- 「@TenantDiscriminatorColumn」

- 「@TenantTableDiscriminator」

@TenantTableDiscriminator

テナントごとの表マルチテナンシにより、アプリケーションの複数のテナントは、1つ以上のテナント固有の表にデータを分離できます。テナント表識別子は、テナントごとの表マルチテナンシ方針でテナント表と他のテナント表を区別する方法を指定します。

注釈要素

表2-76は、この注釈の要素を示しています。

表2-76 @TenantTableDiscriminatorの注釈要素

注釈要素

説明

デフォルト

java.lang.String ContextProperty

(オプション)テナント表識別子として適用されるコンテキスト・プロパティの名前

eclipselink.tenant-id

TenantTableDiscriminator type

(オプション)永続性ユニットの表とともに使用するテナント表識別子のタイプ

- SCHEMA

- SUFFIX

- PREFIX

SUFFIX

使用方法

テナントごとの表マルチテナンシでは、テナントの表は、接頭辞または接尾辞のネーミング・パターンを使用して区別することで同じスキーマに存在できます。または、異なるスキーマに存在できます。テナント表識別子により、テナントの表を特定して他のテナントの表から分離するために、接頭辞または接尾辞のネーミング・パターンを使用するか異なるスキーマを使用するかが特定されます。タイプは次のとおりです。

- スキーマ: テナント表識別子をスキーマとしてすべてのマルチテナント表に適用します。この方針には、適切なデータベース・プロビジョニングが必要です。

- 接尾辞: テナント表識別子を接尾辞としてすべてのマルチテナント表に適用します。これはデフォルトの方針です。

- 接頭辞: テナント表識別子を接頭辞としてすべてのマルチテナント表に適用します。

テナント表識別子は、エンティティ・レベルまたはマップされたスーパークラス・レベルで指定することができ、常にMultitenant(TABLE_PER_TENANT)とともに使用される必要があります。テナント表識別子のみの指定では不十分です。

@TenantTableDiscriminatorおよびテナントごとの表マルチテナンシの使用の詳細は、「@Multitenant」を参照してください。

例

次の例に、SCHEMAタイプの表識別子を示します。

例2-118 @TenantTableDiscriminator注釈の使用

@Entity
@Table(name=”EMP”)
@Multitenant(TABLE_PER_TENANT)
@TenantTableDiscriminator(type=SCHEMA, contextProperty="eclipselink.tenant-id")
public class Employee {
...
}

例2-119 <tenant-table-discriminator> XMLの使用

<entity class="Employee">
<multitenant type="TABLE_PER_TENANT">
<tenant-table-discriminator type="SCHEMA" context-property="eclipselink.tenant-id"/>
</multitenant>
<table name="EMP">
...
</entity>

関連項目

- 「@Multitenant」

- 「@TenantDiscriminatorColumn」

- 「@TenantDiscriminatorColumns」

- EclipseLinkソリューション・ガイドのマルチテナンシの使用に関する項

- マルチテナントの例: http://wiki.eclipse.org/EclipseLink/Examples/JPA/Multitenant

@TimeOfDay

@TimeOfDayを使用して、@Cache注釈内で使用されるCalendarインスタンスを使用する特定の時刻を指定します。

注釈要素

表2-77は、この注釈の要素を示しています。

表2-77 @TimeOfDayの注釈要素

注釈要素

説明

デフォルト

hour

(オプション)該当日の時間。

0

millisecond

(オプション)該当日のミリ秒。

0

minute

(オプション)該当日の分。

0

second

(オプション)該当日の秒。

0

specified

内部使用向け。変更しないでください。

true

例

@TimeOfDayの使用例は、「@Cache」を参照してください。

関連項目

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

- 「@Cache」

@Transformation

トランスフォーメーション・マッピングとともに@Transformationを使用して、データベース列から属性値への変換を定義します(トランスフォーメーション・マッピングが書込み専用ではない場合。書込み専用の場合、@ReadTransformer注釈が必要です)。

注釈要素

表2-78は、この注釈の要素を示しています。

表2-78 @Transformationの注釈要素

注釈要素

説明

デフォルト

fetch

(オプション)フィールドまたはプロパティの値を遅延ロードする必要があるか、または即時にフェッチする必要があるかどうかを定義します。

- EAGER方針は、値を即時にフェッチする必要がある永続性プロバイダ・ランタイムの要件です。

- LAZY方針は、永続性プロバイダ・ランタイムのヒントです。

EAGER

optional

(オプション)フィールドまたはプロパティの値がnullかどうかのヒント。プリミティブ型では無視され、オプションではないと見なされます。

true

使用方法

読取り専用マッピングではない場合、WriteTransformer注釈またはWriteTransformers注釈のいずれかを指定する必要があります。各WriteTransformerは、属性値から単一データベース列値への変換を定義します(列はWriteTransformerで指定されます)。

例

例2-120に、@Transformation注釈を使用する方法を示します。

例2-120 @Transformation注釈の使用

@Transformation(fetch=FecthType.LAZY, optional="true")
@ReadTransformer(class=package.MyNormalHoursTransformer.class)
@WriteTranformers({
@WriteTranformer(column=@Column(name="START_TIME"),
method="getStartDate"),
@WriteTranformer(column=@Column(name="END_TIME"),
class=package.MyTimeTransformer.class)
})
@Mutable
@ReturnUpdate
@Access(AccessType.PROPERTY)
@AccessMethods(get="getNormalHours", set="setNormalHours")
@Properties({
@Property(name="x", value="y")
})

例2-121に、eclipselink-orm.xmlファイルの<transformation> XML要素を使用する同一マッピングを示します。

例2-121 <transformation> XMLの使用

<transformation name="normalHours" fetch="LAZY" optional="true">
<read-transformer method="buildNormalHours"/>
<write-transformer method="getStartTime">
<column name="START_TIME"/>
</write-transformer>
<write-transformer class="package.MyTimeTransformer">
<column name="END_TIME"/>
</write-transformer>
<mutable/>
<return-update/>
<access type="PROPERTY"/>
<access-methods get="getNormalHours" set="setNormalHours"/>
<properties>
<property name="x" value="y"/>
</properties>
</transformation>

関連項目

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

- 「@WriteTransformer」

- 「@ReadTransformer」

@TypeConverter

@TypeConverterを使用して、マップ済属性の読取りおよび書込み中にデータ値を変更します。

注釈要素

表2-79は、この注釈の要素を示しています。

表2-79 @TypeConverterの注釈要素

注釈要素

説明

デフォルト

name

(必須)コンバータのStringの名前。この名前は、永続性ユニット間で一意である必要があります。

なし

dataType

(オプション)データベースに格納されるtype

void.class [1]

objectType

(オプション)エンティティに格納されるtype

void.class [1]

脚注 1 デフォルトは、永続性フィールドまたはプロパティのタイプから推測されます。

使用方法

各TypeConverterは、一意の名前を付ける必要があり、クラス、フィールドおよびプロパティ・レベルで定義でき、エンティティ、MappedSuperclassおよび埋込み可能クラス内で指定できます。TypeConverterは、常に@Convert注釈を使用して指定されます。

@TypeConverterをBasic、BasicMapまたはBasicCollectionマッピングに配置できます。

EclipseLinkには、@ObjectTypeConverterおよび@StructConverterコンバータも含まれています。

例

例2-122に、@TypeConverter注釈を使用して、データベースに格納されたDouble値をエンティティに格納されたFloat値に変換する方法を示します。

例2-122 @TypeConverter注釈の使用

@Entity
public class Employee implements Serializable{

...

@TypeConverter (
name="doubleToFloat",
dataType=Double.class,
objectType=Float.class,
)
@Convert("doubleToFloat")
public Number getGradePointAverage() {
return gradePointAverage;
}

...
}

関連項目

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

- 「@Convert」

- 「@TypeConverters」

- 「@ConversionValue」

@TypeConverters

@TypeConvertersを使用して、複数のTypeConverter要素を定義します。

注釈要素

表2-80は、この注釈の要素を示しています。

表2-80 @TypeConvertersの注釈要素

注釈要素

説明

デフォルト

TypeConverter[]

(必須)タイプ・コンバータの配列

例

例2-123に、この注釈を使用する方法を示します。

例2-123 @TypeConverters注釈の使用

@Entity
@TypeConverters({
@TypeConverter(name="BigIntegerToString",dataType=String.class,objectType=BigInteger.class)
})
public class Parameters implements Serializable {
private static final long serialVersionUID = -1979843739878183696L;
@Column(name="maxValue", nullable=false, length=512)
@Convert("BigIntegerToString")
private BigInteger maxValue;
...
}

例2-123に、eclipselink-orm.xmlファイルの<type-converters>要素を使用する方法を示します。

例2-124 <type-converters> XMLの使用

<type-converters>
<type-converter name="Long2String" data-type="String" object-type="Long"/>
<type-converter name="String2String" data-type="String" object-type="String"/>
</type-converters>
<entity class="Employee">
...
</entity>

関連項目

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

- 「@TypeConverter」

- 「@Convert」

@UnionPartitioning

@UnionPartitioningを使用して、問合せをすべての接続プールに送信し、結果を統合します。これは、パーティション・リレーションシップ間のManyToManyなど、パーティション化を使用する際にパーティションに及ぶ問合せまたはリレーションシップに使用できます。

注釈要素

表2-81は、この注釈の要素を示しています。

表2-81 @UnionPartitioningの注釈要素

注釈要素

説明

デフォルト

name

パーティション・ポリシーの名前。名前は、永続性ユニットに一意である必要があります。

connectionPools

ロード・バランシングする接続プール名のリスト。

デフォルトでServerSessionのすべての定義済プールに設定されます。

replicateWrite

書込み問合せをレプリケートするかどうかを定義します。

統合時に書込みは通常レプリケートされませんが、結合表をレプリケートする必要がある場合は、ManyToManyリレーションシップのために統合できます。

false

使用方法

エンティティ、リレーションシップ、問合せまたはセッション/永続性ユニットでパーティション化を有効にできます。パーティション・ポリシーは、再利用できるようにグローバルに名付けられ、@Partitioned注釈を使用して設定される必要もあります。

永続性ユニット・プロパティは、読取り/書込み/シーケンスの既存の構成に加えて、名前付き接続プールの追加をサポートします。名前付き接続プールは、データベース・クラスタの各ノードに対して定義される必要があります。

トランザクションによって複数のパーティションからのデータが変更される場合、JTAを使用してデータの適切な2フェーズ・コミットを確認する必要があります。1つのトランザクションに1つのノードのみが使用されるように、EntityManagerで排他接続を構成することもできます。

例

EclipseLinkを使用したパーティション化の例は、「パーティション化の使用」を参照してください。

関連項目

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

- 「@Partitioned」

@UuidGenerator

@UuidGeneratorを使用して、ジェネレータ要素が@GeneratedValue注釈に指定される際に名前で参照できる主キー・ジェネレータを定義します。UUID (全体の一意識別子)ジェネレータは、エンティティ・クラスまたは主キー・フィールドかプロパティに指定される場合があります。

ジェネレータ名は、永続性ユニットに対して(つまり、すべてのジェネレータ・タイプ間で)グローバルです。

注釈要素

表2-82は、この注釈の要素を示しています。

表2-82 @UuidGeneratorの注釈要素

注釈要素

説明

デフォルト

name

UUIDジェネレータの名前。永続性ユニット内に対して一意である必要があります。

例

例2-125に、この注釈を使用する方法を示します。

例2-125 @UuidGenerator注釈の使用

@Entity
@UuidGenerator(name="EMP_ID_GEN")
public class Employee {
@Id
@GeneratedValue(generator="EMP_ID_GEN")
private String id;
}

例2-126に示すとおり、eclipselink-orm.xmlファイルでSessionCustomizerを指定して名前付きシーケンスを構成することもできます。

例2-126 <generated-value> XMLの使用

<id name="id">
<column name="PROJ_ID" />
<generated-value generator="system-uuid"/>
</id>

例2-127に示すとおり、永続性ユニット・レベル(persistence.xmlファイル)で名前付きシーケンスを指定することもできます。

例2-127 persistence.xmlでのジェネレータの指定

<property name="eclipselink.session.customizer" value="eclipselink.example.UUIDSequence"/>

関連項目

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

- 「エンティティ注釈」

@UnionPartitioning

@UnionPartitioningを使用して、問合せをすべての接続プールに送信し、結果を統合します。これは、パーティション・リレーションシップ間のManyToManyなど、パーティション化を使用する際にパーティションに及ぶ問合せまたはリレーションシップに使用できます。

注釈要素

表2-81は、この注釈の要素を示しています。

表2-83 @UnionPartitioningの注釈要素

注釈要素

説明

デフォルト

name

パーティション・ポリシーの名前。名前は、永続性ユニットに一意である必要があります。

connectionPools

ロード・バランシングする接続プール名のリスト。

デフォルトでServerSessionのすべての定義済プールに設定されます。

replicateWrite

書込み問合せをレプリケートするかどうかを定義します。

統合時に書込みは通常レプリケートされませんが、結合表をレプリケートする必要がある場合は、ManyToManyリレーションシップのために統合できます。

false

使用方法

エンティティ、リレーションシップ、問合せまたはセッション/永続性ユニットでパーティション化を有効にできます。パーティション・ポリシーは、再利用できるようにグローバルに名付けられ、@Partitioned注釈を使用して設定される必要もあります。

永続性ユニット・プロパティは、読取り/書込み/シーケンスの既存の構成に加えて、名前付き接続プールの追加をサポートします。名前付き接続プールは、データベース・クラスタの各ノードに対して定義される必要があります。

トランザクションによって複数のパーティションからのデータが変更される場合、JTAを使用してデータの適切な2フェーズ・コミットを確認する必要があります。1つのトランザクションに1つのノードのみが使用されるように、EntityManagerで排他接続を構成することもできます。

例

EclipseLinkを使用したパーティション化の例は、「パーティション化の使用」を参照してください。

関連項目

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

- 「@Partitioned」

@ValuePartition

@ValuePartitionを使用して、特定の接続プールにルーティングされる特定の値パーティションを表現します。

注釈要素

表2-84は、この注釈の要素を示しています。

表2-84 @ValuePartitionの注釈要素

注釈要素

説明

デフォルト

connectionPool

valueの問合せをルーティングするための接続プール

value

値のString表現

例

例2-128に、@ValuePartitionおよび@ValuePartitioning注釈を使用する方法を示します。

例2-128 @ValuePartition注釈の使用

@Entity
@Table(name = "PART_EMPLOYEE")
@IdClass(EmployeePK.class)
@ValuePartitioning(
name="ValuePartitioningByLOCATION",
partitionColumn=@Column(name="LOCATION"),
unionUnpartitionableQueries=true,
defaultConnectionPool="default",
partitions={
@ValuePartition(connectionPool="node2", value="Ottawa"),
@ValuePartition(connectionPool="node3", value="Toronto")
})
@Partitioned("ValuePartitioningByLOCATION")
public class Employee implements Serializable, Cloneable {
...
}

例2-129に、eclipselink-orm.xmlファイルの<partition>要素を使用する方法を示します。

例2-129 <partition> XMLの使用

<entity name="Employee" class="Employee" access="FIELD">
<table name="PART_EMPLOYEE"/>
<id-class class="EmployeePK"/>
<value-partitioning name="ValuePartitioningByLOCATION" union-unpartitionable-queries="true" default-connection-pool="default">
<partition-column name="LOCATION"/>
<partition connection-pool="node2" value="Ottawa"/>
<partition connection-pool="node3" value="Toronto"/>
</value-partitioning>
<partitioned>ValuePartitioningByLOCATION</partitioned>

関連項目

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

- 「@Partitioned」

- 「@ValuePartitioning」

@ValuePartitioning

@ValuePartitioningを使用して、オブジェクト(オブジェクトの場所、テナントなど)からのフィールド値によって、データベース・クラスタへのアクセスをパーティション化します。各値は、特定のサーバーに割り当てられます。その値を持つオブジェクトに対するすべての書込みまたは読取り要求は、サーバーに送信されます。問合せにフィールドがパラメータとして含まれていない場合は、問合せをすべてのサーバーに送信して統合するか、セッションのデフォルトの動作のままにすることができます。

注釈要素

表2-85は、この注釈の要素を示しています。

表2-85 @ValuePartitioningの注釈要素

注釈要素

説明

デフォルト

name

(必須)パーティション・ポリシーの名前。名前は、永続性ユニットに一意である必要があります。

partitionColumn

(必須)問合せをパーティション化するためのデータベース列または問合せパラメータ。

これは表列名であり、クラス属性名ではありません。列値は、問合せに含まれている必要があり、通常はオブジェクトIDの一部です。これは、問合せパラメータの名前にもなります。

問合せにフィールドが含まれていない場合、問合せはパーティション化されません。

partitions

(必須)値パーティションを格納します。各パーティションは、値をconnectionPoolにマップします。

defaultConnectionPool

(オプション)デフォルトの接続プールは、マップされていない値に使用されます。

partitionValueType

(オプション)開始値および終了値のtype。

String

unionUnpartitionableQueries

(オプション)パーティション・フィールドを含まない問合せをすべてのデータベースに送信し、結果を統合するかどうかを定義します。

false

使用方法

エンティティ、リレーションシップ、問合せまたはセッション/永続性ユニットでパーティション化を有効にできます。パーティション・ポリシーは、再利用できるようにグローバルに名付けられ、@Partitioned注釈を使用して設定される必要もあります。

永続性ユニット・プロパティは、読取り/書込み/シーケンスの既存の構成に加えて、名前付き接続プールの追加をサポートします。名前付き接続プールは、データベース・クラスタの各ノードに対して定義される必要があります。

トランザクションによって複数のパーティションからのデータが変更される場合、JTAを使用してデータの適切な2フェーズ・コミットを確認する必要があります。1つのトランザクションに1つのノードのみが使用されるように、EntityManagerで排他接続を構成することもできます。

例

EclipseLinkを使用したパーティション化の例は、「パーティション化の使用」を参照してください。

関連項目

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

- 「@Partitioned」

@VariableOneToOne

@VariableOneToOneを使用して、Javaオブジェクトとインタフェースの実装者の間のポインタ参照を表します。このマッピングは、通常、ソース・オブジェクトとターゲット・オブジェクトの間の1つのポインタ(インスタンス変数に格納されます)で表されます。リレーショナル・データベース表では、これらのマッピングは通常、外部キーとタイプ・コードを使用して実装されます。

注釈要素

表2-86は、この注釈の要素を示しています。

表2-86 @VariableOneToOneの注釈要素

注釈要素

説明

デフォルト

CascadeType

(オプション)アソシエーションのターゲットにカスケードされる必要がある操作の配列

DiscriminatorClasses

(オプション)このマッピングとともに使用できる識別子タイプの配列

何も指定されていない場合、EclipseLinkは、ターゲット・インタフェースを実装する永続性ユニット内のエンティティを追加します。

DiscriminatorColumnがSTRINGの場合、EclipseLinkはEntity.name()を使用します。

DiscriminatorColumnがCHARの場合、EclipseLinkはエンティティ・クラスの最初の文字を使用します。

DiscriminatorColumnがINTEGERの場合、EclipseLinkは、最大の整数が明示的に示された後の次の整数を使用します。

DiscriminatorColumn

(オプション)タイプ識別子を含む識別子列

DTYPE

FetchType

(オプション)フィールドまたはプロパティの値をロードする方法を指定します。

- Eager: 永続性プロバイダ・ランタイムは値を即時にフェッチする必要があります。

- Lazy: 永続性プロバイダが値を遅延ロードすることを示します。

Eager

Optional

(オプション)アソシエーションがオプションかどうかを指定します。

OrphanRemoval

(オプション)インタフェース・クラスがこのマッピングのターゲットであるかどうかを示します。

TargetInterface

(オプション)このマッピングのターゲットであるインタフェース・クラス

何も指定されていない場合、EclipseLinkは、参照されるオブジェクトのタイプに基づいてインタフェース・クラスを推測します。

使用方法

エンティティ、MappedSuperclassまたは埋込み可能クラスに@VariableOneToOneを指定できます。

例

例2-130に、@VariableOneToOne注釈を使用する方法を示します。

例2-130 @VariableOneToOne注釈の使用

@VariableOneToOne(
cascade={ALL},
fetch=LAZY,
discriminatorColumn=@DiscriminatorColumn(name="CONTACT_TYPE"),
discriminatorClasses={
@DiscriminatorClass(discriminator="E", value="Email.class"),
@DiscriminatorClass(discriminator="P", value="Phone.class")
}
}
@JoinColumn(name="CONTACT_ID", referencedColumnName="C_ID")
@PrivateOwned
@JoinFetch(INNER)
public Contact getContact() {
return contact;
}

例2-131に、eclipselink-orm.xmlファイルの<variable-one-to-one> XML要素を使用する同一マッピングを示します。

例2-131 <variable-one-to-one> XMLの使用

<variable-one-to-one name="contact" fetch="LAZY">
<cascade>
<cascade-all/>
</cascade>
<discriminator-column name="CONTACT_TYPE"/>
<discriminator-class discriminator="E" value="Email.class"/>
<discriminator-class discriminator="P" value="Phone.class"/>
<join-column name="CONTACT_ID" referenced-column-name="C_ID"/>
<private-owned/>
<join-fetch>INNER</join-fetch>
</variable-one-to-one>

関連項目

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

- 「@DiscriminatorClass」

- 「@PrivateOwned」

@VirtualAccessMethods

@VirtualAccessMethodsを使用して、特定のクラスに仮想メソッドが含まれることを指定します。

注釈要素

表2-87は、この注釈の要素を示しています。

表2-87 @VirtualAccessMethodsの注釈要素

注釈要素

説明

デフォルト

get

(オプション)仮想プロパティに使用するgetterメソッドの名前。このメソッドは、1つのjava.lang.Stringパラメータを受け取ってjava.lang.Objectを返す必要があります。

getが指定されている場合、setも指定する必要があります。

get

set

(オプション)仮想プロパティに使用するsetterメソッドの名前。このメソッドは、java.lang.Stringパラメータとjava.lang.Objectパラメータを受け取る必要があります。

setが指定されている場合、getも指定する必要があります。

set

使用方法

@VirtualAccessMethods注釈を使用して、accessType=VIRTUALでマッピングのアクセス・メソッドを定義します。

例

表2-87に、プロパティ・アクセスを使用するエンティティを示します。

例2-132 @VirtualAccessMethods注釈の使用

@Entity
@VirtualAccessMethods
public class Customer{

@Id
private int id;
...

@Transient
private Map<String, Object> extensions;

public <T> T get(String name) {
return (T) extensions.get(name);
}

public Object set(String name, Object value) {
return extensions.put(name, value);
}

@VirtualAccessMethods注釈の使用に加えて、例2-133に示すとおり、eclipselink-orm.xmlファイルの<access>および<access-method>要素も使用できます。

例2-133 <access>および<access-methods> XMLの使用

<access>VIRTUAL</access><access-methods get-method="get" set-method="set"/>@Entity

関連項目

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

- EclipseLinkソリューション・ガイドのJPAエンティティとJAXB Beanを拡張可能にする方法に関する項

@WriteTransformer

TranformationMappingで@WriteTransformerを使用して、単一の属性値を単一のデータベース列値に変換します。@WriteTransformers注釈を使用して、複数の変換をラップします。

注釈要素

表2-88は、この注釈の要素を示しています。

表2-88 @WriteTransformerの注釈要素

注釈要素

説明

デフォルト

column

(オプション)値を書き込む必要がある列

単一のWriteTransfomerが属性に注釈を付与している場合、属性名が列名として使用されます。

@javax.persistence.Column

method

(オプション) マップされたクラスに必要なStringメソッドの名前。このメソッドは、データベース列に書き込まれる値を戻します。

注意: DDL生成とリターン・ポリシーをサポートする場合、Objectだけでなく特定のタイプを戻すようにメソッドを定義する必要があります。例: public Time getStartTime()

デフォルトでBasicとしてマップされないように、メソッドに@Transientが必要な場合があります。

transformerClass

(オプション) FieldTransformerインタフェースを実装するユーザー定義済クラス。これは、クラスをインスタンス化し、buildFieldValueメソッドを使用して、データベース列に書き込まれる値を作成します。

注意: DDL生成とリターン・ポリシーをサポートする場合、インタフェースで定義されたようにObjectだけでなく、関連するJavaタイプを戻すようにクラス内のメソッドbuildFieldValueを定義する必要があります。例: public Time buildFieldValue(Object instance, String fieldName, Session session)。

void.class

注意:
transformerClassまたはmethodのいずれか(両方ではない)を指定する必要があります。

使用方法

読取り専用マッピングに@WriteTransformerを定義することはできません。

TransformationMappingが書込み専用ではない場合、データベース列値から属性値への変換を定義するReadTransformerが含まれる必要があります。

フィールドとトランスフォーマの関連付けの構成

FieldTransformerの使用は非介入的です。ドメイン・オブジェクトは、EclipseLinkインタフェースを実装したり特別な変換メソッドを提供する必要はありません。

メソッド・ベース・フィールド・トランスフォーマは、AbstractTransformationMappingメソッドaddFieldTransformationを使用し、使用するデータベース・フィールド名とドメイン・オブジェクト・メソッドの名前を渡すことで構成できます。

クラス・ベース・フィールド・トランスフォーマは、AbstractTransformationMappingメソッドaddFieldTransformerを使用し、データベース・フィールド名およびorg.eclipse.persistence.mappings.Transfomers.FieldTransformerのインスタンスを渡すことで構成できます。

FieldTransformerを作成するには、FieldTransformerAdapterを拡張すると便利です。

例

トランスフォーメーション・マッピングとともに@WriteTransformer注釈を使用する方法の例は、「@Transformation注釈の使用」を参照してください。

関連項目

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

- 「@WriteTransformers」

- 「@Transformation」

@WriteTransformers

TranformationMappingで@WriteTransformerを使用して、単一の属性値を単一のデータベース列値に変換します。@WriteTransformers注釈を使用して、複数の変換をラップします。

注釈要素

表2-89は、この注釈の要素を示しています。

表2-89 @WriteTransformersの注釈要素

注釈要素

説明

デフォルト

WriteTransformer

WriteTransformerの配列

使用方法

読取り専用マッピングに@WriteTransformersを使用することはできません。

例

トランスフォーメーション・マッピングとともに@WriteTransformer注釈を使用する方法の例は、「@Transformation注釈の使用」を参照してください。

関連項目

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

- 「@WriteTransformer」

- 「@Transformation」

3 Java永続性問合せ言語の拡張機能

この章では、標準のJPA Java永続性問合せ言語(JPQL)に対するEclipseLinkの拡張機能について説明します。EclipseLink問合せ言語(EQL)と呼ばれるこれらの拡張機能は、その多くが標準SQLの一部である追加データベース機能へのアクセス、ネイティブなデータベース機能や関数へのアクセス、およびEclipseLink固有機能へのアクセスを提供します。

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

- 特殊な演算子

- EclipseLink問合せ言語

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

- JPA仕様の問合せ言語に関する項(http://jcp.org/en/jsr/detail?id=317)

- Java EE 6チュートリアルのJava永続性問合せ言語に関する項(http://docs.oracle.com/javaee/6/tutorial/doc/bnbtg.html)

3.1 特殊な演算子

EclipseLinkは、標準JPQLでは不可能なデータベース操作を実行するために次の演算子を定義します。

- COLUMN

- FUNCTION

- OPERATOR

- SQL

3.2 EclipseLink問合せ言語

EclipseLinkは、次のEclipseLink EQL関数へのアクセスを提供しています。

- CAST

- EXCEPT

- EXTRACT

- INTERSECT

- ON

- REGEXP

- TABLE

- TREAT

- UNION

CAST

CASTを使用して、値を特定のデータベース・タイプに変換します。

使用方法

CAST関数は、データベースに依存しませんが、データベースのサポートを必要とします。

例

例3-1に、このJPQLの拡張機能を使用する方法を示します。

例3-1 CAST EQLの使用

CAST(e.salary NUMERIC(10,2))

COLUMN

COLUMNを使用して、オブジェクト表のマップされていない列にアクセスします。

使用方法

COLUMNを使用して、外部キー列、継承識別子またはプリミティブ列(ROWIDなど)にアクセスできます。@AdditionalCriteria注釈内のJPQLフラグメントでCOLUMNを使用することもできます。

例

例3-2に、COLUMN EQLを使用する方法を示します。

例3-2 COLUMN EQLの使用

SELECT e FROM Employee e WHERE COLUMN('MANAGER_ID', e) = :id

例3-3では、COLUMN EQLを使用してプリミティブ列(ROWID)にアクセスします。

例3-3 COLUMNとプリミティブ列の使用

SELECT e FROM Employee e WHERE COLUMN('ROWID', e) = :id

関連項目

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

- 「@AdditionalCriteria」

EXCEPT

複数の問合せを実行する際に、EXCEPTを使用して、最初の問合せの結果から2つ目の問合せの結果を削除します。

使用方法

EXCEPT関数は、データベースに依存しませんが、データベースのサポートを必要とします。

例

例3-4に、このJPQLの拡張機能を使用する方法を示します。

例3-4 EXCEPT EQLの使用

SELECT e FROM Employee e
EXCEPT SELECT e FROM Employee e WHERE e.salary > e.manager.salary

関連項目

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

- 「UNION」

- 「INTERSECT」

EXTRACT

EXTRACTを使用して、日時値の日付部分を取得します。

使用方法

EXTRACT関数は、データベースに依存しませんが、データベースのサポートを必要とします。

例

例3-5に、このJPQLの拡張機能を使用する方法を示します。

例3-5 EXTRACT EQLの使用

EXTRACT(YEAR, e.startDate)

FUNCTION

FUNCTION (以前のFUNC)を使用して、JPQLからデータベース固有の関数をコールします。

使用方法

FUNCTIONを使用して、JPQLで直接サポートされていないデータベース関数をコールしたり、ユーザーまたはライブラリ固有の関数をコールできます。

注意:
FUNCTIONは、データベース固有です。他のJPQL関数とは異なり、別のデータベースをサポートするために関数のコールを変換しません。

FUNCTION関数を使用して、通常の構文で関数をコールします。特別な構文が必要な関数は、FUNCTIONでコールできません。かわりに、OPERATORを使用します。

例

例3-6に、このJPQLの拡張機能を使用する方法を示します。

例3-6 FUNCTION EQLの使用

SELECT p FROM Phone p WHERE FUNCTION('TO_NUMBER', e.areaCode) > 613

SELECT FUNCTION('YEAR', e.startDate) AS year, COUNT(e) FROM Employee e GROUP BY year

例3-7に、Oracle空間問合せとともにFUNCTIONを使用する方法を示します。

例3-7 FUNCTION EQL Oracle空間の使用例

SELECT a FROM Asset a, Geography geo WHERE geo.id = :id AND a.id IN :id_list AND FUNCTION('ST_INTERSECTS', a.geometry, geo.geometry) = 'TRUE'

SELECT s FROM SimpleSpatial s WHERE FUNCTION('MDSYS.SDO_RELATE', s.jGeometry, :otherGeometry, :params) = 'TRUE' ORDER BY s.id ASC

関連項目

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

- 「OPERATOR」

INTERSECT

複数の問合せを実行する際に、INTERSECTを使用して両方の問合せで検出された結果のみを戻します。

例

例3-8に、このJPQLの拡張機能を使用する方法を示します。

例3-8 INTERSECT EQLの使用

SELECT MAX(e.salary) FROM Employee e WHERE e.address.city = :city1
UNION SELECT MAX(e.salary) FROM Employee e WHERE e.address.city = :city2
SELECT e FROM Employee e JOIN e.phones p WHERE p.areaCode = :areaCode1
INTERSECT SELECT e FROM Employee e JOIN e.phones p WHERE p.areaCode = :areaCode2
SELECT e FROM Employee e
EXCEPT SELECT e FROM Employee e WHERE e.salary > e.manager.salary

関連項目

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

- 「UNION」

- 「EXCEPT」

ON

ON句を使用して、外部結合のためなどにJOIN条件に他の条件を追加します。

使用方法

EclipseLinkでは、2つのルート・レベル・オブジェクト間でのON句の使用がサポートされています。

例

例3-9に、このJPQLの拡張機能を使用する方法を示します。

例3-9 ON句のEQの使用

SELECT e FROM Employee e LEFT JOIN e.address ON a.city = :city

SELECT e FROM Employee e LEFT JOIN MailingAddress a ON e.address = a.address

関連項目

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

OPERATOR

OPERATIONを使用して、EclipseLinkの演算子をコールします。

使用方法

EclipseLinkでは、様々なデータベースに変換される標準の演算子名を使用して、多くのデータベース関数がサポートされます。EclipseLinkの演算子は、同等の関数(関数のセット)を持つ任意のデータベースでサポートされます。EclipseLinkのExpressionOperatorクラスを使用して、カスタム演算子を定義したり、DatabasePlatformが演算子をオーバーライドできるようにします。

OPERATORはFUNCTIONに似ていますが、関数をデータベースに依存しないようにすることができるため、特別な構文が必要な関数をコールできます。

サポートされるEclipseLinkの演算子は、次のとおりです。

- Abs

- ToUpperCase

- ToLowerCase

- Chr

- Concat

- Coalesce

- Case

- HexToRaw

- Initcap

- Instring

- Soundex

- LeftPad

- LeftTrim

- RightPad

- RightTrim

- Substring

- Translate

- Ascii

- Length

- CharIndex

- Cast

- Extract

- CharLength

- Difference

- Reverse

- Replicate

- Right

- Locate

- ToNumber

- ToChar

- AddMonths

- DateToString

- MonthsBetween

- NextDay

- RoundDate

- AddDate

- DateName

- DatePart

- DateDifference

- TruncateDate

- NewTime

- Nvl

- NewTime

- Ceil

- Cos

- Cosh

- Acos

- Asin

- Atan

- Exp

- Sqrt

- Floor

- Ln

- Log

- Mod

- Power

- Round

- Sign

- Sin

- Sinh

- Tan

- Tanh

- Trunc

- Greatest

- Least

- Add

- Subtract

- Divide

- Multiply

- Atan2

- Cot

- Deref

- Ref

- RefToHex

- Value

- ExtractXml

- ExtractValue

- ExistsNode

- GetStringVal

- GetNumberVal

- IsFragment

- SDO_WITHIN_DISTANCE

- SDO_RELATE

- SDO_FILTER

- SDO_NN

- NullIf

例

例3-10に、このJPQLの拡張機能を使用する方法を示します。

例3-10 OPERATOR EQLの使用

SELECT e FROM Employee e WHERE OPERATOR('ExtractXml', e.resume, '@years-experience') > 10

関連項目

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

- 「FUNCTION」

REGEXP

REGEXPを使用して、文字列が正規表現に一致するかどうかを判断します。

使用方法

REGEXP関数を使用するには、データベースが正規表現をサポートしている必要があります。

例

例3-11に、このJPQLの拡張機能を使用する方法を示します。

例3-11 REGEXP EQLの使用

e.lastName REGEXP '^Dr\.*'

SQL

SQLを使用して、JPQL文内でSQLを統合します。問合せにJPQLでサポートされていない関数が必要な場合があるため、これはネイティブのSQL問合せを使用するかわりになります。

使用方法

SQL関数には、SQL文字列(JPQL文に埋め込む)およびSQL文字列に変換する引数の両方が含まれています。疑問符( ? )を使用して、SQL関数の引数から変換されるSQL内のパラメータを定義します。

SQLを使用して、標準ではない構文でデータベース関数をコールしたり、SQLリテラルを埋め込んだり、JPQL内でその他のSQL操作を実行することができます。SQLを使用すると、問合せに引き続きJPQLを使用できます。

例

例3-12に、このJPQLの拡張機能を使用する方法を示します。

例3-12 SQL EQの使用

SELECT p FROM Phone p WHERE SQL('CAST(? AS CHAR(3))', e.areaCode) = '613'

SELECT SQL('EXTRACT(YEAR FROM ?)', e.startDate) AS year, COUNT(e) FROM Employee e GROUP BY year

SELECT e FROM Employee e ORDER BY SQL('? NULLS FIRST', e.startDate)

SELECT e FROM Employee e WHERE e.startDate = SQL('(SELECT SYSDATE FROM DUAL)')

TABLE

TABLEを使用して、マップされていない表にアクセスします。

使用方法

TABLE関数では、JPQL問合せで結合表、コレクション表、履歴表、監査表またはシステム表を使用します。

例

例3-13に、SELECT文内で監査表(マップされていない)を使用する方法を示します。

例3-13 TABLE EQLの使用

SELECT e, a.LAST_UPDATE_USER FROM Employee e, TABLE('AUDIT') a WHERE a.TABLE = 'EMPLOYEE' AND a.ROWID = COLUMN('ROWID', e)

TREAT

TREATを使用して、サブクラス値としてオブジェクトをキャストします(つまり、継承がある関連エンティティをダウンキャストします)。

例

例3-14に、このJPQLの拡張機能を使用する方法を示します。

例3-14 TREAT EQLの使用

SELECT e FROM Employee JOIN TREAT(e.projects AS LargeProject)
p WHERE p.budget > 1000000

UNION

UNIONを使用して、2つの問合せの結果を1つの問合せに結合します。

使用方法

UNIONを使用すると、両方の問合せからの一意の結果が戻されます。ALLオプションを含めると、両方の問合せで検出された結果が重複します。

例

例3-15に、このJPQLの拡張機能を使用する方法を示します。

例3-15 UNION EQLの使用

SELECT MAX(e.salary) FROM Employee e WHERE e.address.city = :city1
UNION SELECT MAX(e.salary) FROM Employee e WHERE e.address.city = :city2

関連項目

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

- 「EXCEPT」

- 「INTERSECT」

4 JPA問合せのカスタマイズ拡張機能

この章では、EcpliseLink問合せヒント(JPA問合せの拡張機能)の指定方法を説明します。次を使用して、EclipseLink問合せヒント(JPA問合せの拡張機能)を指定できます。

- @QueryHint注釈の使用

- orm.xmlまたはeclipselink-orm.xmlファイルへのヒントの組込み

- 名前付き問合せや動的問合せ(JPQLまたは基準)の実行時におけるsetHint()メソッドの使用

EclipseLinkでは、次のEclipseLink問合せヒントがサポートされています。

- batch

- batch.size

- batch.type

- cache-usage

- cache-usage.indirection-policy

- cursor

- composite-unit.member

- cursor.initial-size

- cursor.page-size

- exclusive-connection

- flush

- history.as-of

- history.as-of.scn

- inheritance.outer-join

- jdbc.bind-parameters

- jdbc.cache-statement

- jdbc.fetch-size

- jdbc.first-result

- jdbc.max-rows

- jdbc.native-connection

- jdbc.parameter-delimiter

- jdbc.timeout

- join-fetch

- left-join-fetch

- load-group

- load-group.attribute

- maintain-cache

- pessimistic-lock

- prepare

- query-results-cache

- query-results-cache.expiry

- query-results-cache.expiry-time-of-day

- query-results-cache.ignore-null

- query-results-cache.randomize-expiry

- query-results-cache.size

- query-results-cache.type

- query-type

- read-only

- refresh、<

- refresh.cascade

- result-collection-type

- sql.hint

すべてのEclipseLink問合せヒントは、org.eclipse.persistence.config package内のQueryHintsクラスに定義されています。ヒントを設定する場合は、org.eclipse.persistence.configパッケージ内の適切な構成クラスでpublic static finalフィールドを使用して、次のような値を設定できます。

- HintValues

- CacheUsage

- PessimisticLock

- QueryType

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

- EclipseLinkの理解の問合せヒントに関する項

- EclipseLinkソリューション・ガイドの問合せに関する項

- JPA仕様(http://jcp.org/en/jsr/detail?id=317)の10.3.1項、NamedQuery注釈に関する項

batch

eclipselink.batchを使用してEclipseLinkにバッチ処理情報を提供すると、関連するオブジェクトに対する後続の問合せがバッチ内で最適化されるため、オブジェクトを1つずつ取得したり、大規模な1つの結合読取りで取得することを回避できます。

値

この問合せヒントでは、単一値のリレーションシップ・パス式を使用できます。

使用方法

eclipselink.batchヒントを使用すると、EclipseLinkで重複データの読取りが回避されるため、結合よりも効率的です。

SELECT句にオブジェクトが1つしかない問合せについてのみ、バッチ処理を実行できます

有効値は、単一値のリレーションシップ・パス式です。

注意:
ネストされた属性にアクセスするには、ドット表記法を使用します。たとえば、従業員のマネージャのアドレスについてバッチ読取りを実行するには、e.manager.addressを使用します。

例

例4-1に、JPA問合せでこのヒントを使用する方法を示します。

例4-1 JPA問合せでのbatchの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.batch", "e.address");

例4-2に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-2 @QueryHint注釈でのbatchの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.BATCH, value="e.address");

関連項目

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

- 「join-fetch」

- 「batch.size」

- 「batch.type」

- EclipseLinkソリューション・ガイドの問合せに関する項

batch.size

batch.typeがINに設定されている場合、eclipselink.batch.sizeを使用して、バッチ・サイズを構成します。

値

表4-1は、この永続性プロパティの値を説明しています。

表4-1 batch.sizeの有効値

Value

説明

サイズ

IN句ごとのキー数

デフォルト: 256または問合せのpageSize (カーソル問合せの場合)

例

例4-3に、JPA問合せでこのヒントを使用する方法を示します。

例4-3 JPA問合せでのbatch.sizeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.BATCH_SIZE", "3");

例4-4に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-4 @QueryHint注釈でのbatch.sizeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.BATCH_SIZE, value="3");

関連項目

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

- 「batch」

batch.type

eclipselink.batch.typeを使用して、バッチ・フェッチの対象となるすべてのリレーションシップについて問合せで使用するバッチ・フェッチのタイプを指定します。

値

表4-2は、この問合せヒントの値を説明しています。

表4-2 batch.typeの有効値

Value

説明

JOIN

(デフォルト)元の問合せの選択基準がバッチ問合せと結合されます。

EXISTS

結合のかわりに、SQL EXISTSおよび下位選択をバッチ問合せで使用します。

IN

SQL IN句をバッチ問合せで使用し、ソース・オブジェクトIDを渡します。

例

例4-5に、JPA問合せでこのヒントを使用する方法を示します。

例4-5 JPA問合せでのbatch.typeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.BATCH_TYPE", "EXISTS");

例4-6に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-6 @QueryHint注釈でのbatch.typeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.BATCH_TYPE, value="EXISTS");

関連項目

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

- 「batch」

- 「@BatchFetch」

cache-usage

eclipselink.cache-usageを使用して、問合せとEclipseLinkキャッシュとの相互作用の方法を指定します。

値

表4-3は、この問合せヒントの有効値を説明しています。

表4-3 org.eclipse.persistence.config.CacheUsageの有効値

Value

説明

DoNotCheckCache

常にデータベースに移動します。

CheckCacheByExactPrimaryKey

読取り問合せに主キーのみを比較する式が含まれている場合、メモリー内のオブジェクトに対して式を処理すると、キャッシュ・ヒットを取得できます。

CheckCacheByPrimaryKey

読取り問合せに少なくとも主キーを比較する式が含まれている場合、メモリー内のオブジェクトに対して式を処理すると、キャッシュ・ヒットを取得できます。

CheckCacheThenDatabase

任意の読取り問合せを構成し、データベースにアクセスする前にキャッシュを完全にチェックできます。

CheckCacheOnly

任意のすべて読取り問合せを構成し、親セッション・キャッシュ(共有キャッシュ)のみをチェックして、データベースにアクセスせずにその問合せからの結果を返すことができます。

ConformResultsInUnitOfWork

任意の読取り問合せまたはすべて読取り問合せを作業ユニットのコンテキスト内で構成し、作業ユニット内でオブジェクトに加えられた変更に結果を一致させることができます。これには、新規オブジェクト、削除されたオブジェクト、および変更されたオブジェクトが含まれます。

UseEntityDefault

(デフォルト)このエンティティにEclipseLinkディスクリプタAPIで指定されたキャッシュ構成を使用します。

注意: エンティティのデフォルト値では、キャッシュはチェックされません(DoNotCheckCache)。この問合せは、データベースにアクセスしてキャッシュと同期化します。問合せにリフレッシュが設定されている場合を除き、キャッシュされたオブジェクトはデータベースからリフレッシュされずに返されます。EclipseLinkでは、ネイティブ問合せ、またはデータや複数オブジェクトを返すなどの複雑な結果セットを含む問合せに対するキャッシュの使用はサポートされていません。

使用方法

EclipseLink JPAでは、永続性ユニット全体からアクセスされる共有キャッシュを使用します。特定の永続性コンテキストで操作を完了すると、EclipseLinkにより結果が共有キャッシュにマージされ、これにより、エンティティ・マネージャおよび永続性コンテキストがJava SEまたはJava EEで作成されたものであるかどうかにかかわらず、他の永続性コンテキストで結果を使用できるようになります。

エンティティ・マネージャを使用して永続化または削除されたすべてのエンティティは、常に、一貫してキャッシュで保持されます。

例

例4-7に、JPA問合せでこのヒントを使用する方法を示します。

例4-7 JPA問合せでのcache-usageの使用

import org.eclipse.persistence.config.CacheUsage;
import org.eclipse.persistence.config.QueryHints;
query.setHint(QueryHints.CACHE_USAGE, CacheUsage.CheckCacheOnly);

例4-8に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-8 @QueryHint注釈でのcache-usageの使用

import org.eclipse.persistence.config.CacheUsage;
import org.eclipse.persistence.config.TargetDatabase;
@QueryHint(name=QueryHints.CACHE_USAGE, value=CacheUsage.CheckCacheOnly);

関連項目

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

- EclipseLinkの理解のEclipseLinkキャッシュに関する項

- EclipseLinkソリューション・ガイドの問合せに関する項

- EclipseLinkソリューション・ガイドのパフォーマンスの拡張に関する項

- 「cache-usage.indirection-policy」

cache-usage.indirection-policy

eclipselink.cache-usage.indirection-policyを(cache-usageとともに)使用して、インメモリー問合せおよびインスタンス化されていないインダイレクションや遅延リレーションシップに関する一致機能の処理を構成します。

値

表4-4は、この問合せヒントの値を説明しています。

表4-4 cache-usage.indirection-policyの有効値

Value

説明

Conform

一致機能でインスタンス化されていないインダイレクションや遅延オブジェクトが発生した場合、一致処理を行うことが想定されます。

Exception

(デフォルト)一致機能でインスタンス化されていないインダイレクションや遅延オブジェクトが発生した場合、例外がスローされます。

NotConform

一致機能でインスタンス化されていないインダイレクションや遅延オブジェクトが発生した場合、一致処理を行わないことが想定されます。

Trigger

一致機能でインスタンス化されていないインダイレクションや遅延オブジェクトが発生した場合、一致機能がトリガーされます。

使用方法

このヒントは、問合せにより、問合せリレーションシップ全体でjoinが走査される場合にのみ適用されます。

例

例4-9に、JPA問合せでこのヒントを使用する方法を示します。

例4-9 JPA問合せでのcache-usage.indirection-policyの使用

query.setHint(QueryHints.INDIRECTION_POLICY, CacheUsageIndirectionPolicy.Trigger);

例4-10に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-10 @QueryHint注釈でのcache-usage.indirection-policyの使用

@QueryHint(name=QueryHints.INDIRECTION_POLICY, value=CacheUsageIndirectionPolicy.Trigger)

関連項目

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

- EclipseLinkの理解のEclipseLinkキャッシュに関する項

- EclipseLinkソリューション・ガイドの問合せに関する項

- 「cache-usage」

cursor

eclipselink.cursorを使用して、CursoredStreamを返すように問合せを構成します。

値

表4-5は、この永続性プロパティの値を説明しています。

表4-5 cursorの有効値

Value

説明

true

false

(デフォルト)

使用方法

カーソルは、JDBC ResultSetのストリームです。カーソルは、結果セットが大きい場合や問合せのうち少数の結果のみが必要な場合に役立ちます。

各next()を使用してJDBC ResultSetから次をフェッチする場合、カーソルでEnumerationを実装して、それによって生成されるオブジェクトや値を構築します。カーソルにはJDBCライブ接続が必要であるため、この接続は保持されます。カーソルのリソースを解放するには、close()を使用する必要があります。

カーソルにアクセスするには、JPA問合せからgetSingleResult()を使用するか、またはJpaQueryからgetResultCursor()を使用します。

ヒント:
結果のページを取得するには、カーソルのかわりにMAX_ROWSおよびFIRST_RESULTを使用できます。

例

例4-11に、JPA問合せでこのヒントを使用する方法を示します。

例4-11 JPA問合せでのcursorの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.cursor", "TRUE");

例4-12に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-12 @QueryHint注釈でのcursorの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.CURSOR, value="TRUE");

関連項目

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

- 「cursor.initial-size」

- 「cursor.page-size」

composite-unit.member

ecliplselink.composite-unit.member問合せヒントを使用して、問合せの実行対象であるコンポジット・メンバー永続性ユニットの名前を指定します。コンポジット永続性ユニットで実行されるネイティブ問合せに対して使用する必要があります。

値

表4-6は、この永続性プロパティの値を説明しています。

表4-6 composite-unit.memberの有効値

Value

説明

value

コンポジット永続性ユニットの名前。

例

例4-13に、JPA問合せでこのヒントを使用する方法を示します。

例4-13 JPA問合せでのcomposite-unit.memberの使用

import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.composite-unit.member", "mypersistentunit");

例4-14に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-14 @QueryHint注釈でのcomposite-unit.memberの使用

import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.COMPOSITE_UNIT_MEMBER,
value="mypersistentunit");

cursor.initial-size

eclipselink.cursor.initial-sizeを使用して、指定した初期サイズでCursoredStreamを返すように問合せを構成します。

値

表4-7は、この問合せヒントの値を説明しています。

表4-7 cursor.initial-sizeの有効値

Value

説明

int値に解析できるIntegerまたはStrings

next()がコールされる前にストリームに事前作成されたオブジェクトの初期数

例

例4-15に、JPA問合せでこのヒントを使用する方法を示します。

例4-15 JPA問合せでのcursor.initial-sizeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.cursor_initial_size", "10");

例4-16に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-16 @QueryHint注釈でのcursor.initial-sizeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.CURSOR_INITIAL_SIZE, value="10");

関連項目

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

- 「cursor」

cursor.page-size

eclipselink.cursor.page-sizeを使用して、指定したページ・サイズでCursoredStreamを返すように問合せを構成します。

値

表4-8は、この問合せヒントの値を説明しています。

表4-8 cursor.page-sizeの有効値

Value

説明

int値に解析できるIntegerまたはStrings

オブジェクトのバッファが空の場合に、next()コールでストリームからフェッチされるオブジェクトの数

例

例4-17に、JPA問合せでこのヒントを使用する方法を示します。

例4-17 JPA問合せでのcursor.page-sizeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.CURSOR_PAGE_SIZE", "10");

例4-18に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-18 @QueryHint注釈でのcursor.page-sizeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.CURSOR_PAGE_SIZE, value="10");

関連項目

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

- 「cursor」

exclusive-connection

eclipselink.exclusive-connectionを使用して、問合せで排他(トランザクション/書込み)接続を使用するかどうかを指定します。

値

表4-9は、この問合せヒントの値を説明しています。

表4-9 exclusive-connectionの有効値

Value

説明

true

問合せは排他接続によって実行されます。

false

使用方法

これは、EXCLUSIVE_CONNECTION_MODEプロパティが永続性ユニット(VPDなど)に設定されている場合にのみ有効です。jdbc.exclusive-connection.modeが構成されている場合、この問合せヒントを使用して、問合せが排他接続によって実行されるようにします。

これは、データベース・セキュリティが原因で、セキュアな表に結合する問合せを共有接続を介して実行したときに正しい結果が返されない場合など、特定のケースで必要となることがあります。

例

例4-19に、JPA問合せでこのヒントを使用する方法を示します。

例4-19 JPA問合せでのexclusive-connectionの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.EXCLUSIVE_CONNECTION", "TRUE");

例4-20に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-20 @QueryHint注釈でのexclusive-connectionの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.EXCLUSIVE_CONNECTION, value="TRUE");

関連項目

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

- 「jdbc.exclusive-connection.mode」

flush

eclipselink.flushを使用して、問合せの実行前に、問合せで永続性コンテキストをフラッシュするかどうかを指定します。

値

表4-10は、この問合せヒントの値を説明しています。

表4-10 flushの有効値

Value

説明

true

問合せの実行前に、永続性コンテキストのフラッシュがトリガーされます。

false

(デフォルト)

使用方法

永続性コンテキスト内で変更されたオブジェクトに問合せがアクセスする可能性がある場合、問合せで変更が認識されるようにフラッシュをトリガーする必要があります。問合せで変更を認識する必要がない場合は、パフォーマンスを向上させるためにフラッシュを回避する必要があります。

フラッシュ・モードを永続性ユニット・プロパティとして構成することもできます。詳細は、「flush-clear.cache」を参照してください。

問合せ変更について一致機能を使用することもでき、この場合、フラッシュを実行する必要はありません。詳細は、「cache-usage」を参照してください。

例

例4-21に、JPA問合せでこのヒントを使用する方法を示します。

例4-21 JPA問合せでのflushの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.FLUSH", "TRUE");

例4-22に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-22 @QueryHint注釈でのflushの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.FLUSH, value="TRUE");

関連項目

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

- 「persistence-context.flush-mode」

- 「flush-clear.cache」

- EclipseLinkの理解のEclipseLinkキャッシュに関する項

- EclipseLinkソリューション・ガイドの問合せに関する項

- 「cache-usage.indirection-policy」

- 「cache-usage」

history.as-of

ある時点におけるオブジェクトの状態を問い合せるように、問合せを構成します。

値

表4-11は、この問合せヒントの値を説明しています。

表4-11 history.as-ofの有効値

Value

説明

タイムスタンプ

YYYY/MM/DD HH:MM:SS.nの形式のタイムスタンプ

使用方法

問合せの実行と結果はともに、データベースSCNを基準にして存在したデータベースに従います。

注意:
この問合せヒントまたはOracle Flashbackを使用する際には、履歴サポートを含むクラスが必要となります。

例

例4-23に、JPA問合せでこのヒントを使用する方法を示します。

例4-23 JPA問合せでのhistory.as-ofの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.AS_OF", "2012/10/15 11:21:18.2");

例4-24に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-24 @QueryHint注釈でのhistory.as-ofの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.AS_OF, value="2012/10/15 11:21:18.2");

関連項目

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

- 「history.as-of.scn」

- 『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』のOracle Flashback Technologyの使用に関する項

history.as-of.scn

eclipselink.history.as-of.scnを使用して、データベースSCN (システム変更番号)時点でのオブジェクトの状態を問い合せるように問合せを構成します。

値

表4-12は、この問合せヒントの値を説明しています。

表4-12 history.as-of.scnの有効値

Value

説明

value

整数のSCN値

使用方法

注意:
この問合せヒントには、Oracle Flashbackサポートが必要です。

例

例4-25に、JPA問合せでこのヒントを使用する方法を示します。

例4-25 JPA問合せでのhistory.as-of.scnの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.AS_OF_SCN", "3");

例4-26に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-26 @QueryHint注釈でのhistory.as-of.scnの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.AS_OF_SCN, value="3");

関連項目

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

- 「history.as-of」

- 『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』のOracle Flashback Technologyの使用に関する項

inheritance.outer-join

eclipselink.inheritance.outer-joinを使用して、すべてのサブクラスにouter-joinを使用するように問合せを構成します。

値

表4-13は、この問合せヒントの値を説明しています。

表4-13 inheritance.outer-joinの有効値

Value

説明

true

outer-joinを使用します。

false

(デフォルト)outer-joinは使用せず、サブクラスごとに個別の問合せを実行します。

使用方法

この問合せヒントは、ルートまたはブランチの継承クラスについての問合せで使用できます。

DescriptorCustomizer (「descriptor.customizer」を参照)を使用して、この動作を構成することもできます。

注意:
これは、正しい順序付け、firstResult、maxResultおよびカーソルに必要です。

例

例4-27に、JPA問合せでこのヒントを使用する方法を示します。

例4-27 JPA問合せでのinheritance.outer-joinの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.INHERITANCE_OUTER_JOIN", "TRUE");

例4-28に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-28 @QueryHint注釈でのinheritance.outer-joinの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.INHERITANCE_OUTER_JOIN, value="TRUE");

関連項目

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

- EclipseLinkの理解の継承に関する項

- EclipseLinkソリューション・ガイドのパフォーマンスの拡張に関する項

jdbc.bind-parameters

eclipselink.jdbc.bind-parametersを使用して、問合せでパラメータ・バインド(パラメータ化されたSQL)を使用するかどうかを指定します。

値

表4-14は、この問合せヒントの有効値を説明しています。

表4-14 org.eclipse.persistence.config.HintValuesの有効値

Value

説明

TRUE

すべてのパラメータがバインドされます。

FALSE

すべてのパラメータがバインドされるわけではありません。

PERSISTENCE_UNIT_DEFAULT

(デフォルト) EclipseLinkセッションのデータベース・ログイン時に行ったパラメータ・バインド設定が使用されます(デフォルトではtrue)。

使用方法

デフォルトでは、EclipseLinkでのパラメータ・バインドおよび文のキャッシュは有効化されています。そうすることで、EclipseLinkではプリコンパイルされたSQL文を使用し、すべてのSQLパラメータをバインドして、プリコンパイルされたSQL文をキャッシュします。この問合せを再実行するときにはSQLのプリコンパイルが不要になるため、パフォーマンスが向上します。

persistence.xmlファイルで、永続性ユニットのパラメータ・バインドを構成することもできます(Java SE環境で使用する場合)。

例

例4-29に、JPA問合せでこのヒントを使用する方法を示します。

例4-29 JPA問合せでのbind-parametersの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint(QueryHints.BIND_PARAMETERS, HintValues.TRUE);

例4-30に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-30 @QueryHint注釈でのbind-parametersの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.TargetDatabase;
@QueryHint(name=QueryHints.BIND_PARAMETERS, value=HintValues.TRUE);

例4-31に、永続性ユニットpersistence.xmlファイルでパラメータ・バインドを構成する方法を示します。

例4-31 パラメータ・バインド永続性ユニット・プロパティの指定

<property name="eclipselink.jdbc.bind-parameters" value="false"/>

または、次のようにpropertyマップをインポートします。

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.NATIVE_SQL, "true");

関連項目

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

- 「jdbc.cache-statements」

- 「jdbc.batch-writing.size」

- EclipseLinkソリューション・ガイドのパラメータ化されたSQLとSQL文のキャッシュに関する項

jdbc.cache-statement

問合せによりそのJDBC文をキャッシュするかどうかを指定します。

値

表4-15は、この問合せヒントの値を説明しています。

表4-15 jdbc.cache-statementの有効値

Value

説明

true

問合せにより、そのJDBC文がキャッシュされます。

false

(デフォルト)

使用方法

これにより、問合せでパラメータ化されたSQLを文キャッシュとともに使用できます。また、文キャッシュが永続性ユニットについて有効になっている場合、特定の問合せでその文をキャッシュしないようにすることもできます。

ヒント:
通常、問合せごとではなく、永続性ユニット全体について文キャッシュを設定する必要があります(「jdbc.cache-statements」を参照)
DataSourceを使用している場合、DataSource構成に文キャッシュを設定する必要があります。

例

例4-32に、JPA問合せでこのヒントを使用する方法を示します。

例4-32 JPA問合せでのjdbc.cache-statementの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.CACHE_STATEMENT", "TRUE");

例4-33に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-33 @QueryHint注釈でのjdbc.cache-statementの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.CACHE_STATEMENT, value="TRUE");

関連項目

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

- 「jdbc.cache-statements」

- EclipseLinkソリューション・ガイドのパフォーマンスの拡張に関する項

jdbc.fetch-size

追加行が必要な場合に、eclipselink.jdbc.fetch-sizeを使用して、データベースからフェッチする行数を指定します。

注意:
このプロパティにはJDBCドライバのサポートが必要です。

値

表4-16は、この問合せヒントの有効値を説明しています。

表4-16 eclipselink.jdbc.fetch-sizeの有効値

Value

説明

0からInteger.MAX_VALUEまで

(デフォルトは0) Stringの場合、JDBCドライバによって異なります。

0の場合、JDBCドライバのデフォルトが使用されます。

使用方法

多数のオブジェクトを返す問合せに対しては、問合せで使用される行フェッチ・サイズを構成すると、選択条件を満たすのに必要なデータベース・ヒット数が少なくて済み、パフォーマンスが向上します。

デフォルトで、ほとんどのJDBCドライバのフェッチ・サイズは10であるため、1000個のオブジェクトを読み取る場合、フェッチ・サイズを256に増やすと、問合せ結果のフェッチに要する時間が大幅に短縮される場合があります。最適なフェッチ・サイズが常に明白であるとはかぎりません。通常は、予想される総結果サイズの半分または4分の1がフェッチ・サイズとして最適です。

結果セットのサイズが不確かな場合に、誤ってフェッチ・サイズの設定を大きく、または小さくしすぎると、パフォーマンスが低下する可能性があります。

例

例4-34に、JPA問合せでこのヒントを使用する方法を示します。

例4-34 JPA問合せでのjdbc.fetch-sizeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.JDBC_FETCH_SIZE", "100");

例4-35に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-35 @QueryHint注釈でのjdbc.fetch-sizeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.JDBC_FETCH_SIZE, value="100");

関連項目

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

- EclipseLinkソリューション・ガイドの問合せに関する項およびパフォーマンスの拡張に関する項

- EclipseLinkの理解のEclipseLinkキャッシュに関する項

jdbc.first-result

eclipselink.jdbc.first-resultを使用して、問合せで結果内の指定された行数をスキップするかどうかを指定します。

値

表4-17は、この問合せヒントの値を説明しています。

表4-17 jdbc.first-resultの有効値

Value

説明

整数

int値に解析可能なInteger値またはString値

取得する最初の結果の位置

使用方法

この問合せヒントは、JPA問合せsetFirstResults()に類似していますが、NamedQuerysのメタデータに設定できます。

例

例4-36に、JPA問合せでこのヒントを使用する方法を示します。

例4-36 JPA問合せでのjdbc.first-resultの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.JDBC_FIRST_RESULT", "10");

関連項目

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

- EclipseLinkの理解の問合せの概念に関する項

jdbc.max-rows

eclipselink.jdbc.max-rowsを使用して、返される最大行数を指定します。問合せにより、指定された数より多くの行が返された場合、後続行は返されません。

値

表4-18は、この問合せヒントの有効値を説明しています。

表4-18 eclipselink.jdbc.max-rowsの有効値

Value

説明

(Int値に解析可能な)IntまたはString

JDBCの最大行数を構成します。

使用方法

このヒントはJPQL setMaxResults()に類似していますが、NamedQueriesのメタデータ内で指定できます。

例

例4-37に、JPA問合せでこのヒントを使用する方法を示します。

例4-37 JPA問合せでのjdbc.max-rowsの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.JDBC_MAX_ROWS", "100");

例4-38に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-38 @QueryHint注釈でのjdbc.max-rowsの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.JDBC_MAX_ROWS, value="100");

関連項目

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

- EclipseLinkの理解の問合せの概念に関する項

jdbc.native-connection

eclipselink.jdbc.native-connectionを使用して、問合せにネイティブJDBC接続が必要がどうかを指定します。

値

表4-19は、この永続性プロパティの値を説明しています。

表4-19 jdbc.native-connectionの有効値

Value

説明

true

ネイティブ接続が必要です。

false

(デフォルト)ネイティブ接続は不要です。

使用方法

これは、独自のプロキシにJDBC接続をラップするDataSourceが実装されたサーバー・プラットフォームでの問合せに必要となる場合があります。問合せにカスタムJDBCアクセスが必要な場合、ネイティブ接続が必要となる可能性があります。

ネイティブ接続を使用できるようにするには、ServerPlatformを永続性プロパティとして設定する必要があります。ネイティブ接続が必要であるとEclipseLinkですでに認識されている機能については、eclipselink.jdbc.native-connectionがデフォルトでtrueに設定されます。

例

例4-39に、JPA問合せでこのヒントを使用する方法を示します。

例4-39 JPA問合せでのjdbc.native-connectionの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.NATIVE_CONNECTION", "TRUE");

関連項目

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

- 「target-server」

jdbc.parameter-delimiter

eclipselink.jdbc.parameter-delimiterを使用して、(デフォルトのハッシュ文字#のかわりに)カスタム・パラメータのバインディング文字を指定します。

値

表4-20は、この問合せヒントの値を説明しています。

表4-20 jdbc.parameter-delimiterの有効値

Value

説明

文字

すべての有効な単一文字。""は使用しないでください。

例

例4-40に、JPA問合せでこのヒントを使用する方法を示します。

例4-40 JPA問合せでのjdbc.parameter-delimiterの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.PARAMETER_DELIMITER", ",");

例4-41に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-41 @QueryHint注釈でのjdbc.parameter-delimiterの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.PARAMETER_DELIMITER, value=",");

関連項目

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

- 「jdbc.bind-parameters」

jdbc.timeout

eclipselink.jdbc.timeoutを使用して、DatabaseExcpetionをスローする前に、EclipseLinkで問合せ結果を待機する(タイムアウトする)秒数を指定します。

注意:
このプロパティにはJDBCドライバのサポートが必要です。

値

表4-21は、この問合せヒントの有効値を説明しています。

表4-21 eclipselink.jdbc.timeoutの有効値

Value

説明

0からInteger.MAX_VALUEまで

(デフォルトは0) Stringの場合、JDBCドライバによって異なります。

0の場合、EclipseLinkで問合せを待機してタイムアウトすることはありません。

使用方法

一部のデータベース・プラットフォームではロック・タイムアウトをサポートしていない場合があります。それらのプラットフォームでは、JDBC_TIMEOUTヒントを設定できます。

例

例4-42に、JPA問合せでこのヒントを使用する方法を示します。

例4-42 JPA問合せでのjdbc.timeoutの使用

import org.eclipse.persistence.config.CacheUsage;
import org.eclipse.persistence.config.QueryHints;
query.setHint(QueryHints.JDBC_TIMEOUT, "100");

例4-43に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-43 @QueryHint注釈でのjdbc.timeoutの使用

import org.eclipse.persistence.config.CacheUsage;
import org.eclipse.persistence.config.TargetDatabase;
@QueryHint(name=QueryHints.JDBC_TIMEOUT, value="100");

関連項目

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

- 「query-type」

- EclipseLinkの理解のJPA問合せヒントに関する項

- EclipseLinkソリューション・ガイドのパフォーマンスの拡張に関する項

join-fetch

eclipselink.join-fetch hintを使用して、属性を問合せに結合します。

注意:
ネストされた属性にアクセスするには、ドット表記法を使用します。たとえば、従業員のマネージャのアドレスについてバッチ読取りを実行するには、e.manager.addressを使用します。

値

表4-22は、この問合せヒントの有効値を説明しています。

表4-22 eclipselink.join-fetchヒントの有効値

Value

リレーションシップ・パス式

使用方法

このヒントはeclipselink.batchに類似しています。関連オブジェクトの後続問合せを1つの大規模な結合読取りで取得するかわりに、バッチで最適化できます。

eclipselink.join-fetchヒントは、マルチレベルのフェッチ結合が可能であるという点で、JPQL結合とは異なります。

例

例4-44に、JPA問合せでこのヒントを使用する方法を示します。

例4-44 JPA問合せでのjoin-fetchの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.join-fetch", "e.address");

例4-45に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-45 @QueryHint注釈でのjoin-fetchの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.FETCH, value="e.address");

関連項目

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

- EclipseLinkの理解の問合せの最適化に関する項

- JPA仕様(http://jcp.org/en/jsr/detail?id=317)のフェッチ結合に関する項

- 「batch」

- 「left-join-fetch」

- EclipseLinkソリューション・ガイドのパフォーマンスの拡張に関する項

left-join-fetch

eclipselink.left-join-fetchを使用して問合せを最適化することにより、関連オブジェクトは個別に問合せが行われるのではなく、問合せに結合されます。

値

表4-23は、この問合せヒントの値を説明しています。

表4-23 left-join-fetchの有効値

Value

説明

文字列

リレーションシップへのJPQLスタイルのナビゲーション

使用方法

この問合せヒントを使用して、JPQLでサポートされていないネストされた結合フェッチを作成できます。また、eclipselink.left-join-fetchを使用して、ネイティブ問合せを含む結合フェッチを作成することもできます。

注意:
この問合せヒントでは、nullまたは空の値を使用できるOUTER結合を使用します。

例

例4-46に、JPA問合せでこのヒントを使用する方法を示します。

例4-46 JPA問合せでのleft-join-fetchの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.LEFT_FETCH", "STRING");

例4-47に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-47 @QueryHint注釈でのleft-join-fetchの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.LEFT_FETCH, value="STRING");

関連項目

- JPA仕様(http://jcp.org/en/jsr/detail?id=317)のフェッチ結合に関する項

- 「batch」

- 「join-fetch」

- EclipseLinkソリューション・ガイドのパフォーマンスの拡張に関する項

load-group

eclipselink.load-groupを使用して、ロード・グループ・オブジェクトを使用するように問合せを構成します。

値

表4-24は、この永続性プロパティの値を説明しています。

表4-24 load-groupの有効値

Value

説明

load-groupクラス名

LoadGroupのインスタンス。

使用方法

ロード・グループを使用すると、EclipseLinkにより、グループのすべてのリレーショナル属性が確実にロードされます。LoadGroupsは、オブジェクトを返す問合せについてのみサポートされます(1つの別名のみをSELECT句にすることができます)。

例

例4-48に、JPA問合せでこのヒントを使用する方法を示します。

例4-48 JPA問合せでのload-groupの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.LOAD_GROUP", MyLoadGroup);

例4-49に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-49 @QueryHint注釈でのload-groupの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.LOAD_GROUP, value="lg");

関連項目

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

- 「load-group.attribute」

- EclipseLinkの理解のAttributeGroupのタイプおよび操作に関する項

- 「@FetchGroup」

load-group.attribute

eclipselink.load-group.attributeを使用して、問合せで属性のリストを含むload-groupを使用するかどうかを指定します。

使用方法

個別のヒントを使用して、各属性を定義する必要があります。問合せにより、ロード・グループに定義されたすべてのリレーショナル属性がロードされます。

LoadGroupsは、オブジェクトを返す問合せについてのみサポートされます(1つの別名のみをSELECT句にすることができます)。ローカル属性とネストされた属性の両方がサポートされます。

関連項目

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

- 「load-group」

maintain-cache

eclipselink.maintain-cacheを使用して、問合せ結果をセッション・キャッシュでキャッシュするかどうかを制御します。

値

表4-25は、この問合せヒントの有効値を説明しています。

表4-25 org.eclipselink.maintain-cacheの有効値

Value

説明

TRUE

キャッシュは保持されます。

FALSE

(デフォルト)キャッシュは保持されません。

使用方法

eclipselink.maintain-cacheヒントでは、現行の永続性コンテキストに影響を及ぼすことなく、現行のデータベースの内容を問い合せる方法が提供されています。これにより、管理対象外のインスタンスを返すように問合せが構成されるため、このヒントを使用して問合せが行われるエンティティへのすべての更新を永続性コンテキストにマージする必要があります。

例

例4-50に、JPA問合せでこのヒントを使用する方法を示します。

例4-50 JPA問合せでのmaintain-cacheの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint(QueryHints.MAINTAIN_CACHE, HintValues.FALSE);

例4-51に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-51 @QueryHint注釈でのmaintain-cacheの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.MAINTAIN_CACHE, value=HintValues.FALSE);

関連項目

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

- EclipseLinkソリューション・ガイドのクラスタ内のEclipseLinkアプリケーションのスケーリングに関する項

- EclipseLinkソリューション・ガイドのパフォーマンスの拡張に関する項

- EclipseLinkの理解のEclipseLinkキャッシュに関する項

pessimistic-lock

eclipselink.pessimistic-lockを使用して、EclipseLinkでペシミスティック・ロックを使用するかどうかを指定します。

値

表4-26は、この問合せヒントの有効値を説明しています。

表4-26 org.eclipse.persistence.config.PessimisticLockの有効値

Value

説明

NoLock

(デフォルト)ペシミスティック・ロックは使用されません。

Lock

EclipseLinkにより、SELECT .... FOR UPDATE文が発行されます。

LockNoWait

EclipseLinkにより、SELECT .... FOR UPDATE NO WAIT文が発行されます。

使用方法

ペシミスティック・ロックを使用する主な利点は、ロックが取得されると、編集が正常に行われることが保証される点です。これは、オプティミスティック・ロックが原因で多数のオプティミスティック・ロック・エラーが発生する可能性がある高並列アプリケーションにおいて有用です。

ペシミスティック・ロックの短所の1つは、このロックでは追加のデータベース・リソースが必要となるため、編集中にデータベースのトランザクションと接続を保持する必要があるという点です。また、ペシミスティック・ロックがデッドロックの原因となり、同時実行性の問題が発生する場合もあります。

例

例4-52に、JPA問合せでこのヒントを使用する方法を示します。

例4-52 JPA問合せでのpessimistic-lockの使用

import org.eclipse.persistence.config.PessimisticLock;
import org.eclipse.persistence.config.QueryHints;
query.setHint(QueryHints.PESSIMISTIC_LOCK, PessimisticLock.LockNoWait);

例4-53に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-53 @QueryHint注釈でのpessimistic-lockの使用

import org.eclipse.persistence.config.PessimisticLock;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.PESSIMISTIC_LOCK, value=PessimisticLock.LockNoWait);

関連項目

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

- EclipseLinkソリューション・ガイドのクラスタ内のEclipseLinkアプリケーションのスケーリングに関する項

- EclipseLinkの理解の問合せの理解に関する項

- EclipseLinkの理解のEclipseLinkプロジェクトのビルディング・ブロックに関する項

prepare

eclipselink.prepareを使用して、問合せを実行するたびにそのSQLを準備(つまり生成)するかどうかを指定します。

値

表4-27は、この問合せヒントの値を説明しています。

表4-27 prepareの有効値

Value

説明

true

EclipseLinkで問合せが実行されるたびに、SQLが生成されます。

false

(デフォルト) EclipseLinkで問合せが最初に実行されたときにのみ、SQLが生成されます。

使用方法

デフォルトでは、EclipseLinkにより実行ごとにSQLが再生成されることはありません。このため、パフォーマンスが向上する場合があります。

動的SQLを必要とする問合せでは(nullパラメータを処理する場合など)、eclipselink.prepareをfalseに設定します。

例

例4-54に、JPA問合せでこのヒントを使用する方法を示します。

例4-54 JPA問合せでのprepareの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.PREPARE", "TRUE");

例4-55に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-55 @QueryHint注釈でのprepareの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.PREPARE, value="TRUE");

関連項目

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

- EclipseLinkの理解の問合せの理解に関する項

query-results-cache

eclipselink.query-results-cacheを使用して、問合せで結果キャッシュを使用することを指定します。

値

表4-28は、この永続性プロパティの値を説明しています。

表4-28 query-results-cacheの有効値

Value

説明

Persistence_Unit_Default

(デフォルト)

True

問合せ結果がキャッシュされます。

False

問合せ結果はキャッシュされません。

使用方法

デフォルトでは、問合せにより100個の問合せ結果がキャッシュされますが(「query-results-cache.size」を参照)、同じ引数を含む同じ名前付き問合せが再実行される場合、EclipseLinkはデータベースをスキップしてキャッシュ結果を返します。

注意:
問合せキャッシュは、オブジェクト・キャッシュに依存しない異なるキャッシュです。

例

例4-56に、JPA問合せでこのヒントを使用する方法を示します。

例4-56 JPA問合せでのquery-results-cacheの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.QUERY_RESULTS_CACHE", "TRUE");

例4-57に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-57 @QueryHint注釈でのquery-results-cacheの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.QUERY_RESULTS_CACHE, value="TRUE");

例4-58に、orm.xmlファイルでこのヒントを使用する方法を示します。

例4-58 orm.xmlファイルでのquery-results-cacheの使用

<?xml version="1.0"?>
<entity-mappings
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/orm     http://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_4.xsd"
version="2.4">
<entity name="Employee" class="org.acme.Employee" access="FIELD">
<named-query name="findAllEmployeesInCity" query="Select e from Employee e where e.address.city = :city">
<hint name="eclipselink.query-results-cache" value="true"/>
<hint name="eclipselink.query-results-cache.size" value="500"/>
</named-query>
...
</entity>
</entity-mappings>

関連項目

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

- EclipseLinkの理解の問合せ結果キャッシュに関する項

query-results-cache.expiry

eclipselink.query-results-cache.expiryを使用して、問合せの結果キャッシュの有効時間(つまり、有効期限)を設定します。

値

表4-29は、この問合せヒントの値を説明しています。

表4-29 query-results-cache.expiryの有効値

Value

説明

Value

int値に解析可能なIntegerまたはStringsとしてのミリ秒数

使用方法

デフォルトでは、問合せ結果キャッシュの結果は失効しません。

例

例4-59に、JPA問合せでこのヒントを使用する方法を示します。

例4-59 JPA問合せでのquery-results-cache.expiryの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.QUERY_RESULTS_CACHE_EXPIRY", "100");

例4-60に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-60 @QueryHint注釈でのquery-results-cache.expiryの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.QUERY_RESULTS_CACHE_EXPIRY, value="100");

関連項目

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

- 「query-results-cache」

query-results-cache.expiry-time-of-day

eclipselink.query-results-cache.expiry-time-of-dayを使用して、問合せ結果キャッシュの有効期限の時刻を設定します。

値

表4-30は、この永続性プロパティの値を説明しています。

表4-30 query-results-cache.expiry-time-of-dayの有効値

Value

説明

Value

StringとしてのHH:MM:SS形式の時刻

使用方法

デフォルトでは、問合せ結果キャッシュの結果は失効しません。

例

例4-61に、JPA問合せでこのヒントを使用する方法を示します。

例4-61 JPA問合せでのquery-results-cache.expiry-time-of-dayの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.QUERY_RESULTS_CACHE_EXPIRY_TIME_OF_DAY", "11:15:34");

例4-62に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-62 @QueryHint注釈でのquery-results-cache.expiry-time-of-dayの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.QUERY_RESULTS_CACHE_EXPIRY_TIME_OF_DAY, value="11:15:34");

関連項目

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

- 「query-results-cache」

query-results-cache.ignore-null

eclipselink.query-results-cache.ignore-nullを使用して、EclipseLinkがnullの問合せ結果をキャッシュするかどうかを指定します。

値

表4-31は、この問合せヒントの値を説明しています。

表4-31 query-results-cache.ignore-nullの有効値

Value

説明

true

nullの結果は無視されます(つまり、結果はキャッシュされません)。

false

(デフォルト) nullの結果は無視されません(つまり、結果はキャッシュされます)。

使用方法

この問合せヒントを使用すると、2次キー索引として問合せキャッシュを使用して、新規オブジェクトの挿入が可能になります。

例

例4-63に、JPA問合せでこのヒントを使用する方法を示します。

例4-63 JPA問合せでのquery-results-cache.ignore-nullの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.QUERY_RESULTS_CACHE_IGNORE_NULL", "TRUE");

例4-64に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-64 @QueryHint注釈でのquery-results-cache.ignore-nullの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.QUERY_RESULTS_CACHE_IGNORE_NULL, value="TRUE");

関連項目

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

- 「query-results-cache」

query-results-cache.randomize-expiry

eclipselink.query-results-cache.randomize-expiryを使用して、有効期間(query-results-cache.expiry)の設定値の10%をランダム化することを指定します。

値

表4-32は、この問合せヒントの値を説明しています。

表4-32 query-results-cache.randomize-expiryの有効値

Value

説明

true

有効期間の10%がランダム化されます。

false

(デフォルト)有効期間はランダム化されません。

使用方法

この問合せヒントを使用して、指定時刻に失効する複数のキャッシュ値によるボトルネックを回避します。

例

例4-65に、JPA問合せでこのヒントを使用する方法を示します。

例4-65 JPA問合せでのquery-results-cache.randomize-expiryの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.QUERY_RESULTS_CACHE_RANDOMIZE_EXPIRY", "TRUE");

例4-66に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-66 @QueryHint注釈でのquery-results-cache.randomize-expiryの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.QUERY_RESULTS_CACHE_RANDOMIZE_EXPIRY, value="TRUE");

関連項目

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

- 「query-results-cache」

- 「query-results-cache.expiry」

query-results-cache.size

eclipselink.query-results-cache.sizeを使用して、問合せの結果キャッシュの固定サイズを設定します。

値

表4-33は、この問合せヒントの値を説明しています。

表4-33 query-results-cache.sizeの有効値

Value

説明

サイズ

int値に解析可能なIntegerまたはStrings (デフォルト: 100)

使用方法

query-results-cacheを使用する場合、同じ引数を含む同じ名前付き問合せが再実行されると、EclipseLinkはデータベースをスキップしてキャッシュ結果を返します。

注意:
問合せに引数が含まれていない場合、(結果が1つのみのため)サイズ1が使用されます。

例

例4-67に、JPA問合せでこのヒントを使用する方法を示します。

例4-67 JPA問合せでのquery-results-cache.sizeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.QUERY_RESULTS_CACHE_SIZE", "150");

例4-68に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-68 @QueryHint注釈でのquery-results-cache.sizeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.QUERY_RESULTS_CACHE_SIZE, value="150");

関連項目

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

- 「query-results-cache」

query-results-cache.type

eclipselink.query-results-cache.typeを使用して、問合せの結果キャッシュに使用するキャッシュ・タイプを設定します。

値

表4-34は、この問合せヒントの値を説明しています。

表4-34 query-results-cache.typeの有効値

Value

説明

Cache

(デフォルト)固定サイズのLRUキャッシュ(CacheIdentityMap)

Full

完全なキャッシュと保証されたアイデンティティを提供します。

Hard_Weak

サブキャッシュでハード参照を使用すること以外は、SOFT_WEAKと類似しています。

なし

キャッシュされません。

Soft

ソフト参照を使用してマップがオブジェクトを保持すること以外は、FULLに類似しています。

Soft_Weak

最も使用頻度の高いサブキャッシュを保持すること以外は、WEAKに類似しています。

Weak

弱参照を使用してマップがオブジェクトを保持すること以外は、FULLに類似しています。

使用方法

注意

NONEを使用した場合、オブジェクト・アイデンティティは保持されず、オブジェクトはキャッシュされません。

例

例4-69に、JPA問合せでこのヒントを使用する方法を示します。

例4-69 JPA問合せでのquery-results-cache.typeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.QUERY_RESULTS_CACHE_TYPE", "FULL");

例4-70に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-70 @QueryHint注釈でのquery-results-cache.typeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.QUERY_RESULTS_CACHE_TYPE, value="FULL");

関連項目

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

- 「@Cache」

- EclipseLinkの理解のEclipseLinkキャッシュに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のEclipseLinkアプリケーションのスケーリングに関する項

query-type

eclipselink.query-typeを使用して、問合せに使用するEclipseLink問合せタイプを指定します。

値

表4-35は、この問合せヒントの有効値を説明しています。

表4-35 org.eclipse.persistence.config.QueryTypeの有効値

Value

説明

Auto

(デフォルトは0) EclipseLinkにより問合せタイプが選択されます。

ReadAll

ReadAllQueryが使用されます。

ReadObject

ReadObjectQueryが使用されます。

Report

ReportQueryが使用されます。

使用方法

EclipseLinkでは、ほとんどのJPQL問合せについて、デフォルトでorg.eclipse.persistence.queries.ReportQueryまたはorg.eclipse.persistence.queries.ReadAllQueryが使用されます。eclipselink.query-typeヒントを使用すると、単一オブジェクトを返す問合せに、org.eclipse.persistence.queries.ReadObjectQueryなどの別の問合せタイプを指定できます。

例

例4-71に、JPA問合せでこのヒントを使用する方法を示します。

例4-71 JPA問合せでのquery-typeの使用

import org.eclipse.persistence.config.QueryType;
import org.eclipse.persistence.config.QueryHints;
query.setHint(QueryHints.QUERY_TYPE, QueryType.ReadObject);

例4-72に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-72 @QueryHint注釈でのquery-typeの使用

import org.eclipse.persistence.config.QueryType;
import org.eclipse.persistence.config.TargetDatabase;
@QueryHint(name=QueryHints.QUERY_TYPE, value=QueryType.ReadObject);

関連項目

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

- EclipseLinkの理解の問合せに関する項

read-only

eclipselink.read-onlyを使用して、問合せから読取り専用結果を取得します。

値

表4-36は、この問合せヒントの有効値を説明しています。

表4-36 read-onlyの有効値

Value

説明

TRUE

読取り専用結果が問合せから取得されます。

FALSE

(デフォルト)読取り専用結果は問合せから取得されません。

使用方法

非トランザクションの読取り操作では、要求されたエンティティ・タイプが共有キャッシュに格納される場合、デタッチされたコピーではなく、共有インスタンスが返されるように要求できます。

注意:
共有キャッシュから返されるオブジェクトを変更しないでください。

例

例4-73に、JPA問合せでこのヒントを使用する方法を示します。

例4-73 JPA問合せでのread-onlyの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint(QueryHints.READ_ONLY, HintValues.TRUE);

例4-74に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-74 @QueryHint注釈でのread-onlyの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.READ_ONLY, value=HintValues.TRUE);

関連項目

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

- 『Oracle Fusion Middlewareパフォーマンスおよびチューニング・ガイド』のOracle EclipseLink JPAのパフォーマンス・チューニングに関する項

refresh

eclipselink.refreshを使用して、問合せにより返されたオブジェクトでEclipseLinkのセッション・キャッシュを更新するかどうかを指定します。

値

表4-37は、この問合せヒントの有効値を説明しています。

表4-37 eclipselink.refreshの有効値

Value

説明

TRUE

キャッシュがリフレッシュされます。

FALSE

(デフォルト)キャッシュはリフレッシュされません。FALSEのかわりに""を使用できます。

使用方法

eclipselink.refresh問合せヒントは、キャッシュおよび永続性コンテキスト内に生成されているオブジェクトが問合せによってデータベースの現在の状態でリフレッシュされるように構成します。また、フラッシュが行われていない場合は、共有キャッシュ内のオブジェクトもリフレッシュされます。この問合せの実行前にフラッシュがトリガーされない場合、オブジェクトに行われたフラッシュされていない変更は失われます)。リフレッシュは、REFRESH_CASCADEヒントの値に基づいてリレーションシップにカスケードされます。

例

例4-75に、JPA問合せでこのヒントを使用する方法を示します。

例4-75 JPA問合せでのrefreshの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint(QueryHints.REFRESH, HintValues.TRUE);

例4-76に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-76 @QueryHint注釈でのrefreshの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.REFRESH, value=HintValues.TRUE);

関連項目

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

- 「refresh.cascade」

refresh.cascade

eclipselink.refresh.cascadeを使用して、リフレッシュ問合せにより、リフレッシュをリレーションシップにカスケードするかどうかを指定します。

値

表4-38は、この問合せヒントの有効値を説明しています。

表4-38 eclipselink.refresh.cascadeの有効値

Value

説明

CascadeAllParts

すべての関連付けにカスケードされます。

CascadeByMapping

メタデータをマッピングすることにより、カスケードされます。

CascadePrivateParts

私有のリレーションシップにカスケードされます。

NoCascade

カスケードされません。

使用方法

リフレッシュを実行するには、refreshヒントを使用する必要もあります。

例

例4-77に、JPA問合せでこのヒントを使用する方法を示します。

例4-77 JPA問合せでのrefresh.cascadeの使用

import org.eclipse.persistence.config.HintValues
import oorg.eclipse.persistence.config.QueryHints;
query.setHint(QueryHints.REFRESH_CASCADE, CascadePolicy.CascadeAllParts);

例4-78に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-78 @QueryHint注釈でのrefresh.cascadeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.REFRESH_CASCADE, value=CascadePolicy.CascadeAllParts);

関連項目

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

- 「refresh」

result-collection-type

eclipselink.result-collection-typeを使用して、問合せ結果にコレクション・クラス実装を構成します。

値

表4-39は、この問合せヒントの値を説明しています。

表4-39 result-collection-typeの有効値

Value

説明

true

.classを含まない、コレクション型を表す完全修飾クラス名。

false

(デフォルト) nullの結果は無視されません(つまり、結果はキャッシュされます)。

使用方法

ListではないCollection型を使用する場合、getResultList()のかわりに、getResultCollection()またはgetSingleResult()を使用する必要があります。

例

例4-79に、JPA問合せでこのヒントを使用する方法を示します。

例4-79 JPA問合せでのresult-collection-typeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.RESULT_COLLECTION_TYPE", "<CLASS_NAME>");

例4-80に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-80 @QueryHint注釈でのresult-collection-typeの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.RESULT_COLLECTION_TYPE, value="<CLASS_NAME>");

関連項目

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

- EclipseLinkの理解のコレクション・マッピングに関する項

sql.hint

eclipselink.sql.hintを使用して、問合せのSQLにSQLヒントを組み込みます。

値

表4-40は、この問合せヒントの値を説明しています。

表4-40 sql.hintの有効値

Value

説明

value

コメントやデリミタを含む完全なヒント文字列

使用方法

特定のデータベース・プラットフォームでSQLヒントを使用して、問合せでの索引の使用方法や、使用頻度の低いその他の使用方法を定義できます。SQLヒントは、SQL内のSELECT/INSERT/UPDATE/DELETEコマンドの後に組み込みます。

例

例4-81に、JPA問合せでこのヒントを使用する方法を示します。

例4-81 JPA問合せでのsql.hintの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.HINT", "/*+ index(scott.emp ix_emp) * /");

例4-82に、@QueryHint注釈でこのヒントを使用する方法を示します。

例4-82 @QueryHint注釈でのsql.hintの使用

import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
@QueryHint(name=QueryHints.HINT, value="/*+ index(scott.emp ix_emp) * /");

関連項目

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

- EclipseLinkの理解の問合せヒントに関する項

- EclipseLinkソリューション・ガイドの問合せに関する項

- JPA仕様(http://jcp.org/en/jsr/detail?id=317)の10.3.1項、NamedQuery注釈に関する項

5 永続性プロパティの拡張機能リファレンス

この章では、永続性プロパティの拡張機能について説明します。また、永続性ユニットをJPA永続性ディスクリプタ・ファイルpersistence.xmlに構成します。EclipseLinkには、persistence.xmlファイルに構成可能な数多くの永続性プロパティの拡張機能が組み込まれています。

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

- 永続性プロパティの拡張機能の機能別リスト

- 永続性プロパティの拡張機能のアルファベット順リスト

5.1 永続性プロパティの拡張機能の機能別リスト

次に、EclipseLinkの永続性プロパティ(persistence.xmlファイル)の拡張機能を機能別にカテゴリ化してリストします。

- ウィービング

- カスタマイザ

- 検証および最適化

- キャッシング

- マッピング

- スキーマ生成

- JDBC構成

5.1.1 ウィービング

EclipseLinkには、ウィービング用に次の永続性プロパティの拡張機能が組み込まれています。

- weaving

- weaving.changetracking

- weaving.eager

- weaving.fetchgroups

- weaving.internal

- weaving.lazy

5.1.2 カスタマイザ

EclipseLinkには、ディスクリプタおよびセッションをカスタマイズするために、次の永続性プロパティの拡張機能が組み込まれています。

- deploy-on-startup

- descriptor.customizer

- session.customizer

- session.include.descriptor.queries

- session-event-listener

- session-name

- sessions-xml

- target-database

- target-server

- metadata-source

- metadata-source.properties.file

- metadata-source.send-refresh-command

- metadata-source.xml.url

5.1.3 検証および最適化

EclipseLinkには、検証用に次の永続性プロパティの拡張機能が組み込まれています。

- exception-handler

- partitioning

- partitioning.callback

- プロファイラ

5.1.4 ロギング

EclipseLinkには、ロギング用に次の永続性プロパティの拡張機能が組み込まれています。

- logging.connection

- logging.exceptions

- logging.file

- logging.level

- logging.session

- logging.thread

- logging.timestamp

5.1.5 キャッシング

EclipseLinkには、キャッシング用に次の永続性プロパティの拡張機能が組み込まれています。

- cache.coordination.channel

- cache.coordination.jms.factory

- cache.coordination.jms.host

- cache.coordination.jms.reuse-topic-publisher

- cache.coordination.jms.topic

- cache.coordination.jndi.initial-context-factory

- cache.coordination.jndi.password

- cache.coordination.jndi.user

- cache.coordination.naming-service

- cache.coordination.propagate-asynchronously

- cache.coordination.protocol

- cache.coordination.remove-connection-on-error

- cache.coordination.rmi.announcement-delay

- cache.coordination.rmi.multicast-group

- cache.coordination.rmi.multicast-group

- cache.coordination.rmi.packet-time-to-live

- cache.coordination.rmi.url

- cache.coordination.thread.pool.size

- cache.database-event-listener

- cache.shared

- cache.size

- cache.type

- flush-clear.cache

5.1.6 マッピング

EclipseLinkには、マッピング用に次の永続性プロパティの拡張機能が組み込まれています。

- composite-unit

- composite-unit.member

- composite-unit.properties

5.1.7 スキーマ生成

EclipseLinkには、マッピング用に次の永続性プロパティの拡張機能が組み込まれています。

- create-ddl-jdbc-file-name

- ddl.table-creation-suffix

- ddl-generation

- ddl-generation.output-mode

- drop-ddl-jdbc-file-name

5.1.8 JDBC構成

EclipseLinkには、JDBC接続および接続プーリングを構成するために、次の永続性プロパティの拡張機能が組み込まれています。

- connection-pool

- connection-pool.read

- connection-pool.sequence

- jdbc.allow-native-sql-queries

- jdbc.batch-writing

- jdbc.batch-writing.size

- jdbc.cache-statements

- jdbc.cache-statements.size

- jdbc.connector

- jdbc.exclusive-connection.is-lazy

- jdbc.exclusive-connection.mode

- jdbc.native-sql

- jdbc.property

- jdbc.sql-cast

- jdbc.uppercase-columns

5.2 永続性プロパティの拡張機能のアルファベット順リスト

次に、EclipseLinkの永続性プロパティ(persitence.xmlファイル)の拡張機能をアルファベット順にリストします。

- application-location

- cache.coordination.channel

- cache.coordination.jms.factory

- cache.coordination.jms.host

- cache.coordination.jms.reuse-topic-publisher

- cache.coordination.jms.topic

- cache.coordination.jndi.initial-context-factory

- cache.coordination.jndi.password

- cache.coordination.jndi.user

- cache.coordination.naming-service

- cache.coordination.propagate-asynchronously

- cache.coordination.protocol

- cache.coordination.remove-connection-on-error

- cache.coordination.rmi.announcement-delay

- cache.coordination.rmi.multicast-group

- cache.coordination.rmi.multicast-group

- cache.coordination.rmi.packet-time-to-live

- cache.coordination.rmi.url

- cache.coordination.thread.pool.size

- cache.database-event-listener

- cache.shared

- cache.size

- cache.type

- classloader

- composite-unit

- composite-unit.member

- composite-unit.properties

- connection-pool

- connection-pool.read

- connection-pool.sequence

- create-ddl-jdbc-file-name

- ddl.table-creation-suffix

- ddl-generation

- ddl-generation.output-mode

- ddl.table-creation-suffix

- deploy-on-startup

- descriptor.customizer

- drop-ddl-jdbc-file-name

- exception-handler

- exclude-eclipselink-orm

- flush-clear.cache

- id-validation

- jdbc.allow-native-sql-queries

- jdbc.batch-writing

- jdbc.batch-writing.size

- jdbc.cache-statements

- jdbc.cache-statements.size

- jdbc.connector

- jdbc.exclusive-connection.is-lazy

- jdbc.exclusive-connection.mode

- jdbc.native-sql

- jdbc.property

- jdbc.sql-cast

- jdbc.uppercase-columns

- jpa.uppercase-column-names

- jpql.parser

- jpql.validation

- logging.connection

- logging.exceptions

- logging.file

- logging.level

- logging.session

- logging.thread

- logging.timestamp

- metadata-source

- metadata-source.properties.file

- metadata-source.send-refresh-command

- metadata-source.xml.url

- nosql.connection-factory

- nosql.connection-spec

- nosql.property

- oracle.proxy-type

- orm.throw.exceptions

- orm.validate.schema

- partitioning

- partitioning.callback

- persistence-context.close-on-commit

- persistence-context.commit-without-persist-rules

- persistence-context.flush-mode

- persistence-context.persist-on-commit

- persistence-context.reference-mode

- persistenceunits

- persistencexml

- persisencexml.default

- プロファイラ

- session.customizer

- session.include.descriptor.queries

- session-event-listener

- session-name

- sessions-xml

- target-database

- target-server

- temporal.mutable

- tenant-id

- transaction.join-existing

- チューニング

- validate-existence

- validation-only

- weaving

- weaving.changetracking

- weaving.eager

- weaving.fetchgroups

- weaving.internal

- weaving.lazy

application-location

eclipselink.application-locationプロパティを使用して、EclipseLinkによってDDLファイルが書き込まれる(出力される)ファイル・システム・ディレクトリを指定します。

値

表5-1は、この永続性プロパティの値を説明しています。

表5-1 application-locationの有効値

Value

説明

value

ディレクトリの場所。完全修飾されたパスを指定する必要があります。Windowsではバックスラッシュを使用します。UNIXではスラッシュを使用します。

使用方法

このオプションは、eclipselink.ddl-generation.output-modeの値がsql-scriptまたはbothの場合にのみ設定できます。

例

例5-1に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-1 persistence.xmlでのapplication-locationの使用

<property name="eclipselink.application-location" value="c:/YOURDIRECTORY/"/>

例5-2に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-2 プロパティ・マップでのapplication-locationの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.APPLICATION_LOCATION,
"c:/YOURDIRECTORY/");

関連項目

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

- 「ddl-generation.output-mode」

cache.coordination.channel

eclipselink.cache.coordination.channelプロパティを使用して、クラスタ環境のキャッシュ・コーディネーションを構成します。

値

表5-2は、この永続性プロパティの値を説明しています。

表5-2 cache.coordination.channelの有効値

Value

説明

チャネル名

キャッシュ・コーディネーションに使用するチャネル。同じチャネルを使用するすべての永続性ユニットがコーディネート対象です。

デフォルト: EclipseLinkCommandChannel

使用方法

同一ネットワーク上に複数のEclipseLinkデプロイメントが存在する場合は、それぞれ異なるチャネルを使用する必要があります。

例

例5-3に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-3 persistence.xmlでのapplication-locationの使用

<property name="eclipselink.cache.coordination.channel" value="EmployeeChannel" />

例5-4に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-4 プロパティ・マップでのcache.coordination.channelの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.CACHE_COORDINATION_CHANNEL,
"myChannel");

関連項目

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

- 「@Cache」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.jms.factory

クラスタ環境にJMSコーディネーションを使用する場合、eclipselink.cache.coordination.jms.factoryプロパティを使用して、JMSトピック・コネクション・ファクトリ名を構成します。

値

表5-3は、この永続性プロパティの値を説明しています。

表5-3 cache.coordination.jms.factoryの有効値

Value

説明

name

JMSトピック・コネクション・ファクトリ名

デフォルト: jms/EclipseLinkTopicConnectionFactory

使用方法

このプロパティは、JMSコーディネーションに使用します(eclipselink.cache.coordination.protocol = jmsの場合)。

例

このプロパティの使用方法の詳細は、例5-13を参照してください。

関連項目

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

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.jms.host

クラスタ環境にJMSコーディネーションを使用する場合、eclipselink.cache.coordination.jms.hostプロパティを使用して、トピックをホストするJMSサーバーのURLを構成します。

値

表5-4は、この永続性プロパティの値を説明しています。

表5-4 cache.coordination.jms.hostの有効値

Value

説明

url

JMSサーバーの完全修飾されたURL。

トピックがクラスタ全体にわたって分散されている(つまり、ローカルJNDIで検索できる)場合には不要です。

使用方法

このプロパティは、JMSコーディネーションに使用します(eclipselink.cache.coordination.protocol = jmsの場合)。完全修飾されたURLを使用する必要があります。

例

このプロパティの使用方法の詳細は、例5-13を参照してください。

関連項目

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

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.jms.reuse-topic-publisher

eclipselink.cache.coordination.jms.reuse-topic-publisherプロパティを使用して、JSM転送マネージャがTopicPubliserをキャッシュし、すべてのキャッシュ・コーディネーションの公開に再利用するかどうかを指定します。

値

表5-5は、この永続性プロパティの値を説明しています。

表5-5 cache.coordination.jms.reuse-topic-publisherの有効値

Value

説明

true

トピック・パブリッシャがキャッシュされます。

false

(デフォルト)トピック・パブリッシャはキャッシュされません。

使用方法

このプロパティは、JMSコーディネーションに使用します(eclipselink.cache.coordination.protocol = jmsの場合)。

例

このプロパティの使用方法の詳細は、例5-13を参照してください。

関連項目

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

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.jms.topic

クラスタ環境にJMSコーディネーションを使用する場合、eclipselink.cache.coordination.jms.topicプロパティを使用して、JMSトピック名を設定します。

値

表5-6は、この永続性プロパティの値を説明しています。

表5-6 cache.coordination.jms.topicの有効値

Value

説明

name

JMSトピック名を設定します。

デフォルト: jms/EclipseLinkTopic

使用方法

このプロパティは、JMSコーディネーションに使用します(eclipselink.cache.coordination.protocol = jmsの場合)。

例

このプロパティの使用方法の詳細は、例5-13を参照してください。

関連項目

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

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.jndi.initial-context-factory

クラスタ環境にキャッシュ・コーディネーションを使用する場合、eclipselink.cache.coordination.jndi.initial-context-factoryプロパティを使用して、JNDI InitialContextファクトリを設定します。

値

表5-7は、この永続性プロパティの値を説明しています。

表5-7 cache.coordination.jndi.initial-context-factoryの有効値

Value

説明

name

JNDI InitialContextファクトリの名前

使用方法

通常、ローカル・サーバーに接続する場合には、このプロパティは必要ありません。

例

例5-5に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-5 persistence.xmlでのcache.coordination.jndi.initial-context-factoryの使用

<property name="eclipselink.cache.coordination.jndi.initial-context-factory"
value="weblogic.jndi.WLInitialContextFactory/>

例5-6に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-6 プロパティ・マップでのcache.coordination.jndi.initial-context-factoryの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertyMap.put
(PersistenceUnitProperties.CACEH_COORDINATION_JNDI_INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");

関連項目

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

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.jndi.password

クラスタ環境にキャッシュ・コーディネーションを使用する場合、eclipselink.cache.coordination.jndi.passwordプロパティを使用して、cache.coordination.jndi.userのパスワードを設定します。

値

表5-8は、この永続性プロパティの値を説明しています。

表5-8 cache.coordination.jndi.passwordの有効値

Value

説明

value

cache.coordination.jndi.userのパスワード。

使用方法

通常、ローカル・サーバーに接続する場合には、このプロパティは必要ありません。

例

例5-7に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-7 persistence.xmlでのcache.coordination.jndi.passwordの使用

<property name="eclipselink.cache.coordination.jndi.user" value="USERNAME"/>
<property name="eclipselink.cache.coordination.jndi.password" value="PASSWORD"/>

例5-8に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-8 プロパティ・マップでのcache.coordination.jndi.passwordの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertyMap.put(PersistenceUnitProperties.CACHE_COORDINATION_JNDI_USER,
"USERNAME");
propertyMap.put(PersistenceUnitProperties.CACHE_COORDINATION_JNDI_PASSWORD,
"PASSWORD");

関連項目

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

- 「cache.coordination.jndi.user」

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.jndi.user

クラスタ環境にキャッシュ・コーディネーションを使用する場合、eclipselink.cache.coordination.jndi.userプロパティを使用して、JNDIネーミング・サービス・ユーザーを設定します。

値

表5-9は、この永続性プロパティの値を説明しています。

表5-9 cache.coordination.jndi.userの有効値

Value

説明

value

JNDIユーザー。

使用方法

通常、ローカル・サーバーに接続する場合には、このプロパティは必要ありません。

例

このプロパティの使用方法の詳細は、例5-13を参照してください。

関連項目

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

- 「cache.coordination.jndi.password」

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.naming-service

クラスタ環境にキャッシュ・コーディネーションを使用する場合、eclipselink.cache.coordination.naming-serviceプロパティを使用して、使用するネーミング・サービスを指定します。

値

表5-10は、この永続性プロパティの値を説明しています。

表5-10 cache.coordination.naming-serviceの有効値

Value

説明

jndi

JNDIを使用します。

rmi

RMIを構成します。

使用方法

キャッシュ・コーディネーションを有効にする必要があります。

例

例5-9に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-9 persistence.xmlでのcache.coordination.naming-serviceの使用

<property name="eclipselink.cache.coordination" value="true"/>
<property name="eclipselink.cache.coordination.naming-service" value="jndi"/>

例5-10に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-10 プロパティ・マップでのcache.coordination.naming-serviceの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertyMap.put(PersistenceUnitProperties.CACHE_COORDINATION_NAMING_SERVICE,
"jndi");

関連項目

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

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.propagate-asynchronously

eclipselink.cache.coordination.propagate-asynchronouslyプロパティを使用して、コーディネーションのブロードキャストが、コミットするスレッドと非同期で発生するかどうかを指定します。

このプロパティでは、クラスタ環境のキャッシュ・コーディネーションを構成します。コーディネーションのブロードキャストが、コミットするスレッドと非同期で発生するかどうかを設定します。つまり、スレッドがトランザクションのコミットから戻る前に、コーディネーションが完了します。

値

表5-11は、この永続性プロパティの値を説明しています。

表5-11 cache.coordination.propagate-asynchronouslyの有効値

Value

説明

true

(デフォルト) EclipseLinkは、ブロードキャストが非同期で行われます。コーディネーションは、スレッドがトランザクションのコミットから戻る前に完了します。

false

EclipseLinkでは、ブロードキャストが同期で行われます。

使用方法

この設定に関係なく、JMSキャッシュ・コーディネーションは常に非同期です。

デフォルトでは、RMIキャッシュ・コーディネーションは非同期です。要求が返される前にすべてのサーバーが更新されるようにするには、同期(eclipselink.cache.coordination.propagate-asynchronously = false)を使用します。

例

例5-11に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-11 persistence.xmlでのcache.coordination.propagate-asynchronouslyの使用

<property name="eclipselink.cache.coordination.propagate-asynchronously"
value="false" />

例5-12に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-12 プロパティ・マップでのcache.coordination.propagate-asynchronouslyの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertyMap.put
(PersistenceUnitProperties.CACHE_COORDINATION_PROPAGATE_ASYNCHRONOUSLY,
"false");

関連項目

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

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.protocol

eclipselink.cache.coordination.protocolプロパティを使用して、使用するキャッシュ・コーディネーション・プロトコルを指定します。各ディスクリプタのキャッシュ構成に応じて、クラスタに対するキャッシュの更新または挿入がブロードキャストされ、各セッションのキャッシュが更新または無効化されます。

値

表5-12は、この永続性プロパティの値を説明しています。

表5-12 cache.coordination.protocolの有効値

Value

説明

jms

Java Message Service (JMS)を使用して、変更をブロードキャストします。

jms-publishing

使用予定のEJB MessageDrivenBeanを使用して、変更をブロードキャストします。MessageDrivenBeanを個別に構成する必要があります。

rmi

Java Remote Method Invocation (RMI)を使用して、変更をブロードキャストします。

rmi-iiop

RMI over Internet Inter-ORB Protocol (IIOP)を使用して、変更をブロードキャストします。

ClassName

TransportManager抽象クラスのサブクラス実装の名前。

使用方法

クラスタ内のすべての永続性ユニットおよびセッションについて、cache.coordination.protocolを指定する必要があります。

例

例5-13に、persistence.xmlファイルでJMSキャッシュ・コーディネーションを構成する方法を示します。

例5-13 persistence.xmlでのJMSキャッシュ・コーディネーションの構成

<property name="eclipselink.cache.coordination.protocol" value="jms" />
<property name="eclipselink.cache.coordination.jms.topic"
value="jms/EmployeeTopic" />
<property name="eclipselink.cache.coordination.jms.factory"
value="jms/EmployeeTopicConnectionFactory" />

アプリケーションをクラスタで実行中ではない場合、次のようにURLを指定する必要があります。

<property name="eclipselink.cache.coordination.jms.host"
value="t3://myserver:7001/" />

また、必要に応じて、サーバーにアクセスするために(別のドメインを使用している場合など)、ユーザー名とパスワードを含めることもできます。

<property name="eclipselink.cache.coordination.jndi.user" value="weblogic" />
<property name="eclipselink.cache.coordination.jndi.password" value="welcome1" />

例5-14に、persistence.xmlファイルでRMIキャッシュ・コーディネーションを構成する方法を示します。

例5-14 persistence.xmlでのRMIキャッシュ・コーディネーションの構成

<property name="eclipselink.cache.coordination.protocol" value="rmi" />

アプリケーションをクラスタで実行中ではない場合、次のようにURLを指定する必要があります。

<property name="eclipselink.cache.coordination.rmi.url"
value="t3://myserver:7001/" />

また、必要に応じて、サーバーにアクセスするために(別のドメインを使用している場合など)、ユーザー名とパスワードを含めることもできます。

<property name="eclipselink.cache.coordination.jndi.user" value="weblogic" />
<property name="eclipselink.cache.coordination.jndi.password" value="welcome1" />

デフォルトでは、RMIキャッシュ・コーディネーション・ブロードキャストは非同期です。このことは、必要に応じてオーバーライドできます。

<property name="eclipselink.cache.coordination.propagate-asynchronously"
value="false" />

同じサーバーまたはネットワーク上に複数のアプリケーションがある場合、アプリケーションごとに個別のキャッシュ・コーディネーション・チャネルを指定できます。

<property name="eclipselink.cache.coordination.channel" value="EmployeeChannel" />

RMIキャッシュ・コーディネーションでは、サーバーが相互に検索できるようにマルチキャスト・ソケットを使用します。必要に応じて、次のようにマルチキャスト設定を構成できます。

<property name="eclipselink.cache.coordination.rmi.announcement-delay"
value="1000" />
<property name="eclipselink.cache.coordination.rmi.multicast-group"
value="239.192.0.0" />
<property name="eclipselink.cache.coordination.rmi.multicast-group.port"
value="3121" />
<property name="eclipselink.cache.coordination.packet-time-to-live" value="2" />

関連項目

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

- 「cache.coordination.channel」

- 「cache.coordination.jms.factory」

- 「cache.coordination.jms.host」

- cache.coordination.jms.reuse-topic-publisher「cache.coordination.jms.reuse-topic-publisher」

- 「cache.coordination.jms.topic」

- 「cache.coordination.jndi.initial-context-factory」

- 「cache.coordination.jndi.password」

- 「cache.coordination.jndi.user」

- 「cache.coordination.naming-service」

- 「cache.coordination.propagate-asynchronously」

- 「cache.coordination.remove-connection-on-error」

- 「cache.coordination.rmi.announcement-delay」

- 「cache.coordination.rmi.multicast-group」

- 「cache.coordination.rmi.multicast-group」

- 「cache.coordination.rmi.packet-time-to-live」

- 「cache.coordination.rmi.url」

- 「cache.coordination.thread.pool.size」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.remove-connection-on-error

eclipselink.cache.coordination.remove-connection-on-errorプロパティを使用して、キャッシュ・コーディネーション中にEclipseLinkで通信エラーが発生した場合、接続を削除するかどうかを指定します。

値

表5-13は、この永続性プロパティの値を説明しています。

表5-13 cache.coordination.remove-connection-on-errorの有効値

Value

説明

true

通信エラーが発生した場合、接続が削除されます。サーバーが使用可能になると、EclipseLinkは再接続されます。

false

(デフォルト)通信エラーが発生しても接続は削除されません。

使用方法

通常、サーバーが停止した場合に、RMI接続に使用されます。

例

例5-15に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-15 peristence.xmlでのcache.coordination.remove-connection-on-errorの使用

<property name="eclipselink.cache.coordination.remove-connection-on-error"
value="true"/>

例5-16に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-16 プロパティ・マップでのcache.coordination.remove-connection-on_errorの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertyMap.put
(PersistenceUnitProperties.CACHE_COORDINATION_REMOVE_CONNECTION_ON_ERROR,"true");

関連項目

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

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.rmi.announcement-delay

eclipselink.cache.coordination.rmi.announcement-delayプロパティを使用して、起動時に他のクラスタ・メンバーからの通知を待機する時間(ミリ秒単位)を設定します。

値

表5-14は、この永続性プロパティの値を説明しています。

表5-14 cache.coordination.rmi.announcement-delayの有効値

Value

説明

数値

起動時に、通知を待機する時間(ミリ秒単位)

デフォルト: 1000

使用方法

このプロパティは、RMIコーディネーションに使用します(eclipselink.cache.coordination.protocol = rmiの場合)。

例

このプロパティの使用方法の詳細は、例5-14を参照してください。

関連項目

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

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.rmi.multicast-group

クラスタ環境にキャッシュ・コーディネーションを使用する場合、eclipselink.cache.coordination.rmi.multicast-groupプロパティを使用して、(クラスタの他のメンバーを検索するのに使用する)マルチキャスト・ソケット・グループのアドレスを設定します。

値

表5-15は、この永続性プロパティの値を説明しています。

表5-15 cache.coordination.rmi.multicast-groupの有効値

Value

説明

数値

マルチキャスト・ソケット・グループのアドレスを設定します。

デフォルト: 239.192.0.0

使用方法

このプロパティは、RMIコーディネーションに使用します(eclipselink.cache.coordination.protocol = rmiの場合)。

例

このプロパティの使用方法の詳細は、例5-14を参照してください。

関連項目

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

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.rmi.multicast-group.port

クラスタ環境にキャッシュ・コーディネーションを使用する場合、eclipselink.cache.coordination.rmi.multicast-groupプロパティを使用して、(クラスタの他のメンバーを検索するのに使用する)マルチキャスト・ソケット・グループのポートを設定します。

値

表5-16は、この永続性プロパティの値を説明しています。

表5-16 cache.coordination.rmi.multicast-group.portの有効値

Value

説明

数値

マルチキャスト・ソケット・グループのポートを設定します。

デフォルト: 3121

使用方法

このプロパティは、RMIコーディネーションに使用します(eclipselink.cache.coordination.protocol = rmiの場合)。

例

このプロパティの使用方法の詳細は、例5-14を参照してください。

関連項目

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

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.rmi.packet-time-to-live

eclipselink.cache.coordination.rmi.packet-time-to-liveプロパティを使用して、セッション通知データ・パケットが失効するまでのホップ数を設定します。マルチキャスト・グループは、クラスタの他のメンバーを検索するために使用されます。

値

表5-17は、この永続性プロパティの値を説明しています。

表5-17 cache.coordination.rmi.packet-time-to-liveの有効値

Value

説明

数値

セッション通知データ・パケットが失効するまでに通過するホップ数

デフォルト: 2

使用方法

WANに含まれる別々のLANでセッションがホストされている場合は、あるセッションによって送信された通知が他のセッションに到達しないことがあります。この場合は、適切な存続時間の値についてネットワーク管理者に問い合せるか、他のセッションによって送信された通知が各セッションで受信されるまで値を増やすことによって、ネットワークをテストしてください。

このプロパティは、RMIコーディネーションに使用します(eclipselink.cache.coordination.protocol = rmiの場合)。

例

このプロパティの使用方法の詳細は、例5-14を参照してください。

関連項目

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

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.rmi.url

eclipselink.cache.coordination.rmi.urlプロパティを使用して、ホスト・サーバーのURLを設定します。このURLは、他のクラスタ・メンバーがこのホストに接続するときに使用されます。

値

表5-18は、この永続性プロパティの値を説明しています。

表5-18 cache.coordination.rmi.urlの有効値

Value

説明

url

ホスト・サーバーのURL

デフォルト: local

使用方法

このプロパティは、RMIコーディネーションに使用します(eclipselink.cache.coordination.protocol = rmiの場合)。

これは、クラスタ環境でJNDIがレプリケートされる場合には不要である可能性があります。また、場所をシステム・プロパティとして設定するか、SessionCustomizerを使用して設定すると、サーバーごとに個別のpersistence.xmlファイルを使用する必要がなくなります。

例

このプロパティの使用方法の詳細は、例5-14を参照してください。

関連項目

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

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.coordination.thread.pool.size

eclipselink.cache.coordination.thread.pool.sizeプロパティを使用して、キャッシュ・コーディネーション・スレッドのための、スレッド・プールのサイズを構成します。

値

表5-19は、この永続性プロパティの値を説明しています。

表5-19 cache.coordination.thread.pool.sizeの有効値

Value

説明

数値

スレッド・プールのサイズ。0の場合、EclipseLinkではスレッド・プールを使用するかわりに、必要に応じてスレッドを生成します。

デフォルト: 32

使用方法

RMIキャッシュ・コーディネーションの場合、EclipseLinkでは、変更通知を送信するためにノードごとに1つのスレッドを生成し、新規ノード通知をリスニングするために1つのスレッドを生成します。

JMSキャッシュ・コーディネーションの場合、EclipseLinkでは、JMS変更通知メッセージを受信するために1つのスレッドを生成し(MDBが使用されていない場合)、変更通知を処理するために1つのスレッドを生成します(MDBが使用されていない場合)。

例

例5-17に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-17 persistence.xmlでのcache.coordination.thread.pool.sizeの使用

<property name="eclipselink.cache.coordination.thread.pool.size"
value="48"/>

例5-18に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-18 プロパティ・マップでのcache.coordination.thread.pool.sizeの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertyMap.put(PersistenceUnitProperties.CACHE_COORDINATION_THREAD_POOL_SIZE,
"48");

関連項目

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

- 「cache.coordination.protocol」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

cache.database-event-listener

eclipselink.cache.database-event-listenerプロパティを使用して、EclipseLinkとOracle QCN/DCN (問合せ変更通知/データベース変更通知)などのデータベース・イベント通知サービスを統合します。

値

表5-20は、この永続性プロパティの値を説明しています。

表5-20 cache.database-event-listenerの有効値

Value

説明

クラス

OracleChangeNotificationListener (org.eclipse.persistence.platform.database.oracle.dcn.OracleChangeNotificationListener)などの、DatabaseEventListenerを実装するクラス名。

Oracle用にDCNおよびQCNを使用することもできます。

使用方法

このプロパティを使用すると、データベース変更イベント、トリガー、またはその他のサービスによるEclipseLinkキャッシュの無効化を許可できます。

例

例5-19に、Oracle DCNでこのプロパティを使用する方法を示します。

例5-19 persistence.xmlでのcache.database-event-listenerの使用

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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
persistence_2_0.xsd"
version="2.0">
<persistence-unit name="acme" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.cache.database-event-listener" value=
"org.eclipse.persistence.platform.database.oracle.dcn.OracleChangeNotificationList
ener"/>
</properties>
</persistence-unit>
</persistence>

関連項目

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

- 「@Cache」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

- Oracle Fusion Middleware Oracle WebLogic Server JDBCデータ・ソースの構成と管理のデータベース変更通知に関する項

cache.shared

eclipselink.cache.sharedプロパティ接頭辞を使用して、エンティティのキャッシュを共有する(非独立キャッシュにする)かどうかを指定します。

値

表5-21は、この永続性プロパティ接頭辞の値を説明しています。

表5-21 cache.sharedの有効値

Value

説明

true

(デフォルト)エンティティのキャッシュが共有されます。値の大/小文字は区別されません。

false

エンティティのキャッシュは共有されません。値の大/小文字は区別されません。

使用方法

有効なエンティティ名またはクラス名をclass.sharedに追加してプロパティ名を形成し、プロパティ値が特定のエンティティにのみ適用されることを示します。または、cache.sharedプロパティ接頭辞にdefault接尾辞を追加してプロパティ名を形成し、そのプロパティ名がデフォルトですべてのエンティティに設定されるようにすることもできます。

例

このプロパティの使用方法の詳細は、例2-12を参照してください。

cache.size

eclipselink.cache.sizeプロパティ接頭辞を使用して、特定のエンティティ・タイプのキャッシュ・サイズを指定します。

値

表5-22は、この永続性プロパティ接頭辞の値を説明しています。

表5-22 cache.sizeの有効値

Value

説明

整数

キャッシュのサイズ。デフォルト: 100バイト。

使用方法

有効なエンティティ名またはクラス名をcache.sizeに追加してプロパティ名を形成し、プロパティ値が特定のエンティティにのみ適用されることを示します。または、cache.sizeプロパティ接頭辞にdefault接尾辞を追加して、そのプロパティ値がすべてのエンティティに適用されることを示すこともできます。

ほとんどのキャッシュ・タイプの場合、サイズは固定サイズや最大サイズではなく、初期サイズにすぎません。CacheType.SoftCacheタイプおよびCacheType.HardCacheのサイズは、サブキャッシュ・サイズです。デフォルトのキャッシュ・サイズは100バイトです。

例

このプロパティの使用方法の詳細は、例2-12を参照してください。

cache.type

eclipselink.cache.typeプロパティ接頭辞を使用して、キャッシュのタイプを設定します。

値

表5-23は、この永続性プロパティ接頭辞の値を説明しています。

表5-23 cache.typeの有効値

Value

説明

Weak

アプリケーションで使用中のすべてのオブジェクトが保持されます。参照されていないオブジェクトは解放され、ガベージ・コレクションの対象になります。このキャッシュ・タイプでは、オブジェクト識別性が保証され、ガベージ・コレクションが最適化されますが、キャッシュの利点はほとんど得られません。

Soft

アプリケーションで読み取られたすべてのオブジェクトが保持されます。参照されていないオブジェクトは、メモリー残量が低下しているとJVMが判断した場合にのみ、ガベージ・コレクションの対象として解放されます。このキャッシュ・タイプでは、オブジェクト識別性が保証され、メモリー残量の低下時にガベージ・コレクションが行われます。キャッシュの利点を最適に利用できます。

SoftWeak

(デフォルト)アプリケーションで読み取られたすべてのオブジェクトおよびSoft参照を使用しているMRUオブジェクトの固定サイズのサブキャッシュが保持されます。SoftWeakキャッシュでは、サブキャッシュ外の参照されていないオブジェクトがガベージ・コレクションの対象として解放されます。サブキャッシュ内のオブジェクトは、メモリー残量が低下しているとJVMが判断した場合にのみガベージ・コレクションの対象として解放されます。このキャッシュ・タイプでは、オブジェクト識別性が保証され、構成可能なガベージ・コレクションを使用できます。また、構成可能なキャッシュの利点を利用できます。

HardWeak

アプリケーションで使用中のすべてのオブジェクトおよび通常のHard参照を使用しているMRUオブジェクトの固定サイズのサブキャッシュが保持されます。このタイプでは、サブキャッシュ外の参照されていないオブジェクトはガベージ・コレクションの対象として解放されますが、サブキャッシュ内のオブジェクトは解放されません。このキャッシュ・タイプでは、オブジェクト識別性が保証され、構成可能なガベージ・コレクションを使用できます。また、構成可能なキャッシュの利点を利用できます。

Full

アプリケーションで読み取られたすべてのオブジェクトが保持されます。このキャッシュ・タイプでは、ガベージ・コレクションは行われません。このタイプでは、オブジェクト識別性が保証され、ガベージ・コレクションは行われません。キャッシュの利点を完全に利用できます。

警告: このキャッシュ・タイプは、一定数のオブジェクトにのみ使用してください。そうでない場合、最終的にメモリー・リークが発生します。

NONE

いずれのオブジェクトもキャッシュされません。参照されていないオブジェクトはガベージ・コレクションの対象として解放されます。このタイプでは、オブジェクト識別性は提供されず、ガベージ・コレクションが完全に行われます。キャッシュの利点は得られません。

警告: このキャッシュ・タイプは、通常は使用しないでください。かわりに、PersistenceUnitProperties.CACHE_SHAREDによって共有キャッシュを無効化します。オブジェクトを識別できないため、オブジェクトに循環参照があり、インダイレクションがない場合は、無限ループが発生する可能性があります。

使用方法

有効なエンティティ名またはクラス名をclass.typeに追加してプロパティ名を形成し、プロパティ値が特定のエンティティにのみ適用されることを示します。または、cache.type接頭辞にdefault接尾辞を追加してプロパティ名を形成し、そのプロパティ名がデフォルトですべてのエンティティに設定されるようにすることもできます。

cache.typeプロパティの有効値は、CacheTypeクラスで宣言されます。デフォルトはSoftWeakです。

キャッシュ・エンティティが不要の場合は、cache.sharedプロパティを設定します。

例

このプロパティの使用方法の詳細は、例2-12を参照してください。

関連項目

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

- cache.shared

classloader

eclipselink.classloaderプロパティを使用して、Persistence.createEntityManagerFactoryに渡すプロパティ・マップに、EntityMangerFactoryを作成します。

値

表5-24は、この永続性プロパティの値を説明しています。

表5-24 classloaderの有効値

Value

説明

value

使用するクラス・ローダー。

使用方法

これは、実行時にプロパティ・マップに設定する必要がある動的プロパティです。このプロパティをpersistence.xmlファイルで構成することはできません。

例

例5-20に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-20 プロパティ・マップでのclassloaderの使用

properties.put("eclipselink.classloader", this.getClass().getClassLoader());

composite-unit

eclipselink.composite-unitプロパティを使用して、永続性ユニットがコンポジット永続性ユニットかどうかを指定します。

値

表5-25は、この永続性プロパティの値を説明しています。

表5-25 composite-unitの有効値

Value

説明

true

永続性ユニットはコンポジット永続性ユニットです。

false

(デフォルト) 永続性ユニットはコンポジット永続性ユニットではありません。

使用方法

このプロパティは、コンポジット永続性ユニットのpersistence.xmlで指定する必要があります。コンポジット永続性ユニットには、persistence.xmlファイルによって指定されたJARファイルで見つかるすべての永続性ユニットが含まれている必要があります。

注意:
このプロパティは、createEntityManagerFactoryメソッドに渡されるか、またはシステム・プロパティで設定されている場合、無視されます。

例

例5-21に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-21 persistence.xmlでのcomposite-unitの使用

<persistence 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 persistence_1_0.xsd" version="1.0">
<persistence-unit name="compositePu" transaction-type="JTA">
<provider>
org.eclipse.persistence.jpa.PersistenceProvider
</provider>

<jar-file>member1.jar</jar-file>
<jar-file>member2.jar</jar-file>

<properties>
<property name="eclipselink.composite-unit" value="true"/>
<property name="eclipselink.target-server" value="WebLogic_10"/>
</properties>
</persistence-unit>
</persistence>

関連項目

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

- 「composite-unit.member」

- 「composite-unit.properties」

- EclipseLinkソリューション・ガイドの複数のデータベースとコンポジット永続性ユニットの使用に関する項

composite-unit.member

eclipselink.composite-unit.memberプロパティを使用して、永続性ユニットがコンポジット永続性ユニットのメンバーであるかどうかを指定します。

値

表5-26は、この永続性プロパティの値を説明しています。

表5-26 composite-unit.memberの有効値

Value

説明

true

永続性ユニットはコンポジット永続性ユニットのメンバーである必要があり、単独の永続性ユニットとしては使用できません。

false

(デフォルト)永続性ユニットは、コンポジット永続性ユニットのメンバーである必要はありません。

使用方法

このプロパティをtrueに設定すると、永続性ユニットに、他の永続性ユニットに対する依存性があることを示します。

注意:
このプロパティは、createEntityManagerFactoryメソッドに渡されるか、またはシステム・プロパティで設定されている場合、無視されます。
このプロパティがtrueに設定されている場合、EntityManagerFactoryを引き続き作成できますが、接続することはできません。エンティティ・マネージャを作成しようとすると、例外が発生します。

問合せヒント

コンポジット永続性ユニットについてネイティブ問合せを実行する場合、composite-unit.memberを使用して、問合せの実行対象であるコンポジット・メンバー永続性ユニットの名前を指定します。

例

例5-22に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-22 persistence.xmlでのcomposite-unit.memberの使用

コンポジット・メンバー永続性ユニットmemberPu2が、member2.jarファイルで定義されています。これは、member1.jarで定義されたクラスに対する依存性があり、単独では使用できません。

<persistence 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 persistence_1_0.xsd"
version="1.0">
<persistence-unit name="memberPu2">
<provider>
org.eclipse.persistence.jpa.PersistenceProvider
</provider>
<mapping-file>META-INF/advanced-entity-mappings2.xml</mapping-file>
<jta-data-source>jdbc/MySqlJtaDS</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.composite-unit.member" value="true"/>
<property name="eclipselink.target-database"
value="org.eclipse.persistence.platform.database.MySQLPlatform"/>
</properties>
</persistence-unit>
</persistence>

関連項目

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

- 「@CompositeMember」

- 「composite-unit」

- 「composite-unit.member」

composite-unit.properties

eclipselink.composite-unit.propertiesプロパティを使用して、永続性ユニットのメンバーについてプロパティを構成します。

値

表5-27は、この永続性プロパティの値を説明しています。

表5-27 composite-unit.propertiesの有効値

Value

説明

プロパティのマップ

永続性ユニットに渡すプロパティ。キーとして永続性ユニットの名前を使用します。

使用方法

このプロパティをコンポジット永続性ユニットのcreateEntityManagerメソッドに渡し、そのメンバーの永続性ユニットに各種プロパティを渡します。

例

例5-23に、プロパティ・マップでこのプロパティを使用する方法を示します

例5-23 プロパティ・マップでのcomposite-unit.propertiesの使用

Map props1 = new HashMap();

props1.put("javax.persistence.jdbc.user", "user1");
props1.put("javax.persistence.jdbc.password", "password1");
props1.put("javax.persistence.jdbc.driver", "oracle.jdbc.OracleDriver");
props1.put("javax.persistence.jdbc.url", "jdbc:oracle:thin:@oracle_db_url:1521:db");

Map props2 = new HashMap();

props2.put("javax.persistence.jdbc.user", "user2");
props2.put("javax.persistence.jdbc.password", "password2");
props2.put("javax.persistence.jdbc.driver", "com.mysql.jdbc.Driver");
props2.put("javax.persistence.jdbc.url", " jdbc:mysql://my_sql_db_url:3306/user2");

Map memberProps = new HashMap();
memberProps.put("memberPu1", props1);
memberProps.put("memberPu2", props2);

Map props = new HashMap();
props.put("eclipselink.logging.level", "FINEST");
props.put("eclipselink.composite-unit.properties", memberProps);

EntityManagerFactory emf = Persistence.createEntityManagerFactory("compositePu", props);

関連項目

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

- 「composite-unit」

connection-pool

eclipselink.connection-poolプロパティを使用して、接続プールの各種プロパティを構成します。

値

表5-28は、この永続性プロパティの値を説明しています。

表5-28 connection-poolの有効値

Value

説明

initial

開始時(初期)の接続数。

min

最小接続数。

max

最大接続数。

wait

プールからの接続を待機する時間(ミリ秒単位)。

url

接続用のJDBCのURL。

shared

読取り接続プールについて、読取り接続がスレッド間で共有されることを示します。

jtaDataSource

接続に使用するJTAデータ・ソース名(デフォルトと異なる場合)。

nonJtaDataSource

接続に使用する非JTAデータ・ソース名(デフォルトと異なる場合)。

user

この接続に使用するユーザー名(デフォルトと異なる場合)。

password

この接続用のuserのパスワード(デフォルトと異なる場合)。

使用方法

接続プール名および構成するプロパティを追加します。接続プールが指定されている場合、EclipseLinkではデフォルトの(書込み)プールが構成されます。

例

例5-24に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-24 persistence.xmlでのconnection-poolの使用

<property name="eclipselink.connection-pool.default.initial" value="1" />
<property name="eclipselink.connection-pool.node2.min" value="16"/>
<property name="eclipselink.connection-pool.node2.max" value="16"/>
<property name="eclipselink.connection-pool.node2.url"
value="jdbc:oracle:thin:@node2:1521:orcl"/>

関連項目

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

- EclipseLinkの理解の接続プールに関する項

- EclipseLinkソリューション・ガイドの接続プーリングに関する項

- 「jdbc.cache-statements」

- 「connection-pool.read」

- 「connection-pool.sequence」

connection-pool.read

eclipselink.connection-pool.readプロパティを使用して、非トランザクション読取り問合せ用の読取り接続プールを構成します。

値

表5-29は、この永続性プロパティの値を説明しています。

表5-29 connection-pool.readの有効値

Value

説明

initial

開始時(初期)の接続数。

min

最小接続数。

max

最大接続数。

wait

プールからの接続を待機する時間。

url

JDBC接続のURL。

shared

読取り接続プールについて、読取り接続がスレッド間で共有されることを示します。

jtaDataSource

接続に使用するJTAデータ・ソース名(デフォルトと異なる場合)。

nonJtaDataSource

接続に使用する非JTAデータ・ソース名(デフォルトと異なる場合)。

user

この接続に使用するユーザー名(デフォルトと異なる場合)。

password

この接続用のuserのパスワード(デフォルトと異なる場合)。

使用方法

デフォルトで、EclipseLinkでは、読取り問合せにデフォルト・プールが使用され、独立した読取り接続プールは使用されません。

例

例5-25に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-25 persistence.xmlでのconnection-pool.readの使用

<property name="eclipselink.connection-pool.read.min" value="16"/>
<property name="eclipselink.connection-pool.read.max" value="16"/>

関連項目

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

- EclipseLinkの理解の接続プールに関する項

- EclipseLinkソリューション・ガイドの接続プーリングに関する項

- 「connection-pool」

connection-pool.sequence

eclipselink.connection-pool.sequenceプロパティを使用して、生成されたIDを接続プールによって割り当てます。

値

表5-30は、この永続性プロパティの値を説明しています。

表5-30 connection-pool.sequenceの有効値

Value

説明

true

データ・ソースからの接続をプールする際に内部接続プールを使用します。

false

(デフォルト)データ・ソースからの接続をプールする際に内部接続プールを使用しません。

使用方法

これは、TABLEの順序付けにのみ必要となります。デフォルトで、EclipseLinkでは、順序付けにはデフォルト・プールが使用され、独立したシーケンス接続プールは使用されません。

例

例5-26に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-26 persistence.xmlでのconnection-pool.sequenceの使用

<property name="eclipselink.connection-pool.sequence" value="true"/>

関連項目

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

- EclipseLinkの理解の接続プールに関する項

- EclipseLinkソリューション・ガイドの接続プーリングに関する項

- 「connection-pool」

create-ddl-jdbc-file-name

eclipselink.create-ddl-jdbc-file-nameプロパティを使用して、EclipseLinkによって生成された、JPAエンティティの表を作成するSQL文を含むDDLファイルの名前を指定します。

値

表5-31は、この永続性プロパティの値を説明しています。

表5-31 create-ddl-jdbc-file-nameの有効値

Value

説明

ファイル名

オペレーティング・システムに有効なファイル名。

eclipselink.application-locationとeclipselink.create-ddl-jdbc-file-nameの連結が、使用するオペレーティング・システムに有効である場合は、ファイル名に接頭辞としてファイル・パスを付加できます。

使用方法

eclipselink.ddl-generationがcreate-tablesまたはdrop-and-create-tablesに設定されている場合、EclipseLinkでは、eclipselink.application-locationによって指定された場所に、このファイルが書き込まれます。

例

このプロパティの使用方法の詳細は、例5-27を参照してください。

関連項目

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

- 「application-location」

- 「ddl-generation」

ddl-generation

eclipselink.ddl-generationプロパティを使用して、EclipseLinkでデプロイメント時にデータベース・スキーマ(表および制約)用にデータ定義言語(DDL)を生成する方法を指定します。

値

表5-32は、この永続性プロパティの値を説明しています。

表5-32 ddl-generationの有効値

Value

説明

create-tables

EclipseLinkでは、表ごとにCREATE TABLE SQLの実行が試行されます。

この表がすでに存在する場合、EclipseLinkは、特定のデータベースとJDBCドライバの組合せに応じたデフォルトの動作に従います(CREATE TABLE SQLが既存の表について発行された場合)。ほとんどの場合、例外がスローされ、表は作成されず、既存の表が使用されます。その後、EclipseLinkでは、次の文の処理に進みます。

create-or-extend-tables

EclipseLinkによって、表の作成が試行されます。表が存在する場合は、EclipseLinkによって、欠落しているすべての列が追加されます。

drop-and-create-tables

EclipseLinkによって、すべての表のDROPが試行された後、すべての表のCREATEが試行されます。なんらかの問題が発生した場合、EclipseLinkでは、特定のデータベースとJDBCドライバの組合せに応じたデフォルト動作に従った後、次の文の処理に進みます。

このことは、開発においてスキーマが頻繁に変更される場合、または、テストにおいて既存データを消去する必要がある場合に役立ちます。

注意: drop-and-createを使用すると、表を削除したときに表内のすべてのデータが削除されます。データベース内に重要なデータが存在する本番スキーマでは、このオプションを使用しないでください。スキーマが大幅に変更された場合は、古い制約がデータベース内に存在することによって、古い表を削除できないことがあります。このことによって、別のメカニズムを使用して、古いスキーマを削除することが必要となる場合があります。

none

(デフォルト) DDLは生成されず、スキーマも生成されません。

使用方法

eclipselink.ddl-generation.output-mode = databaseである場合にのみ、create-or-extend-tablesを使用できます。

Java SE環境で永続性を使用しており、表を作成することなくDDLファイルを作成する場合、追加的にJavaシステム・プロパティINTERACT_WITH_DBを定義して、その値をfalseに設定します。

このプロパティを有効にするには、DDL_GENERATIONを設定する必要があります。

例

例5-27に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-27 persistence.xmlでのddl-generationの使用

<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.create-ddl-jdbc-file-name" value="createDDL_ddlGeneration.jdbc"/>
<property name="eclipselink.drop-ddl-jdbc-file-name" value="dropDDL_ddlGeneration.jdbc"/>
<property name="eclipselink.ddl-generation.output-mode" value="both"/>

例5-28に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-28 プロパティ・マップでのddl-generationの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.DDL_GENERATION,
PersistenceUnitProperties.DROP_AND_CREATE);
propertiesMap.put(PersistenceUnitProperties.DDL_GENERATION_MODE,
PersistenceUnitProperties.BOTH);
propertiesMap.put(PersistenceUnitProperties.CREATE_JDBC_DDL_FILE, "create.sql");

関連項目

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

- 「create-ddl-jdbc-file-name」

- 「drop-ddl-jdbc-file-name」

- 「ddl-generation.output-mode」

ddl-generation.output-mode

eclipselink.ddl-generation.output-modeプロパティを使用して、DDLがEclipseLinkによってどこに生成および書き込まれるかを指定します。

値

表5-33は、この永続性プロパティの値を説明しています。

表5-33 ddl-generation.output-modeの有効値

Value

説明

both

DDLは、データベースとファイルの両方に生成および書き込まれます。

- eclipselink.ddl-generationがcreate-tablesに設定されている場合、eclipselink.create-ddl-jdbc-file-nameがeclipselink.application-locationに書き込まれ、データベース上で実行されます。

- eclipselink.ddl-generationがdrop-and-create-tablesに設定されている場合、eclipselink.create-ddl-jdbc-file-nameとeclipselink.drop-ddl-jdbc-file-nameの両方がeclipselink.application-locationに書き込まれ、両方のSQLファイルがデータベース上で実行されます。

database

(デフォルト) DDLは、データベースにのみ生成および書き込まれます。

sql-script

DDLは、ファイルにのみ生成および書き込まれます。

- eclipselink.ddl-generationがcreate-tablesに設定されている場合、eclipselink.create-ddl-jdbc-file-nameがeclipselink.application-locationに書き込まれます。データベース上では実行されません。

- eclipselink.ddl-generationがdrop-and-create-tablesに設定されている場合、eclipselink.create-ddl-jdbc-file-nameとeclipselink.drop-ddl-jdbc-file-nameの両方がeclipselink.application-locationに書き込まれます。いずれもデータベース上では実行されません。

使用方法

ddl-generation.output-modeは、ddl-generationを使用する場合にのみ使用できます。これにより、他のプロパティを最適に設定できます。

例

このプロパティの使用方法の詳細は、例5-27を参照してください。

関連項目

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

- 「application-location」

- 「ddl-generation」

- 「create-ddl-jdbc-file-name」

ddl.table-creation-suffix

eclipselink.ddl.table-creation-suffixプロパティを使用して、生成されたCREATE Table文の最後に文字列を追加します。

値

表5-34は、この永続性プロパティの値を説明しています。

表5-34 ddl-generation.table-creation-suffixの有効値

Value

説明

value

接尾辞の名前。

使用方法

ddl.generationプロパティを設定する必要があります。

例

例5-29に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-29 persistence.xmlでのddl.table-creation-suffixの使用

<property name="eclipselink.ddl.table-creation-suffix" value="engine=InnoDB"/>

関連項目

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

- 「ddl-generation」

deploy-on-startup

eclipselink.deploy-on-startupプロパティを使用して、EntityManagerが最初に作成されたときではなく、起動時(EntityManagerFactoryの作成時)にデプロイメントを構成します。

値

表5-35は、この永続性プロパティの値を説明しています。

表5-35 delay-on-startupの有効値

Value

説明

true

EntityManagerの作成時(通常はJava EEコンテナまたはサーブレット・コンテナへのデプロイ時)に、永続性ユニットが作成されます。

false

(デフォルト)最初のEntityManagerが作成されるまで、またはEntityManagerFactoryでメタデータが必要になるまで、永続性ユニットは初期化されません。

使用方法

trueを使用すると、JavaEEサーバーの起動時間が増加しますが、永続性ユニットがデプロイされているため、最初の要求がハングしなくなります。

例

例5-30に、peristence.xmlファイルでこのプロパティを使用する方法を示します。

例5-30 persistence.xmlでのdeploy-on-startupの使用

<property name="eclipselink.deploy-on-startup" value="true" />

descriptor.customizer

eclipselink.descriptor.customizerプロパティをプロパティの接頭辞として使用して、DescriptorCustomizerを構成します。org.eclipse.persistence.descriptors.ClassDescriptorを値として使用するこのクラスのカスタマイズ・メソッドを使用して、拡張されたEclipseLinkディスクリプタにプログラムによってアクセスし、JPAエンティティに関連付けられるディスクリプタにAPIをマッピングします。

値

表5-36は、この永続性プロパティの値を説明しています。

表5-36 descriptor.customizerの有効値

Value

説明

name

DescriptorCustomizerを実装するクラスのフルネーム。

使用方法

複数のディスクリプタ・カスタマイザを使用することはできません。

例

例5-31に、peristence.xmlファイルでこのプロパティを使用する方法を示します。

例5-31 persistence.xmlでのdescriptor.customizerの使用

<property name="eclipselink.descriptor.customizer.Order"
value="acme.sessions.MyDesriptorCustomizer"/>

例5-32に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-32 プロパティ・マップでのdescriptor.customizerの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.DESCRIPTOR_CUSTOMIZER+".Order",
"acme.sessions.MyDescriptorCustomizer");

関連項目

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

- EclipseLinkの理解

- JPA仕様の8.1項「エンティティ」http://jcp.org/en/jsr/detail?id=220

drop-ddl-jdbc-file-name

eclipselink.drop-ddl-jdbc-file-nameプロパティを使用して、EclipseLinkによって生成された、JPAエンティティの表を削除するSQL文を含むDDLファイルの名前を指定します。

値

表5-37は、この永続性プロパティの値を説明しています。

表5-37 drop-ddl-jdbc-file-nameの有効値

Value

説明

ファイル名

オペレーティング・システムに有効なファイル名。

eclipselink.application-locationとeclipselink.create-ddl-jdbc-file-nameの連結が、使用するオペレーティング・システムに有効である場合は、ファイル名に接頭辞としてファイル・パスを付加できます。

使用方法

eclipselink.ddl-generationがcreate-tablesに設定されている場合、EclipseLinkでは、eclipselink.application-locationによって指定された場所にこのファイルが書き込まれます

例

このプロパティの使用方法の詳細は、例5-27を参照してください。

関連項目

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

- 「ddl-generation」

exception-handler

eclipselink.exception-handlerプロパティを使用して、EclipseLink例外ハンドラ・クラス、すなわちorg.eclipse.persistence.exceptions.ExceptionHandlerインタフェースを実装し、デフォルトの(ゼロ引数)コンストラクタを提供する例外ハンドラ・クラスを指定します。このクラスは、デフォルトの引数を使用しないコンストラクタを提供する必要があります。

値

表5-38は、この永続性プロパティの値を説明しています。

表5-38 exception-handlerの有効値

Value

説明

ExceptionHandler class

java.lang.RuntimeExceptionを値として使用するこのクラスのhandleExceptionメソッドを使用して、次のことを行います。

- 例外の再スロー

- 別の例外のスロー

- 問合せまたはデータベース操作の再試行

使用方法

ExceptionHandlerクラス名は、そのパッケージ名で完全修飾されている必要があります。

例

例5-33に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-33 persistence.xmlでのexception-handlerの使用

<property name="eclipselink.exception-handler"
value="my.package.MyExceptionHandler">

例5-34に、プロパティ・マップでこの拡張機能を使用する方法を示します。

例5-34 プロパティ・マップでのexception-handlerの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.EXCEPTION_HANDLER_CLASS,
"my.package.MyExceptionHandler");

関連項目

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

- 「orm.throw.exceptions」

- EclipseLinkの理解のセッションに関する項

- EclipseLinkソリューション・ガイドの問題の管理および診断に関する項

exclude-eclipselink-orm

eclipselink.exclude-eclipselink-ormプロパティを使用して、特定の永続性ユニットについてEclipseLink ORMマッピング・ファイルを除外します。

値

表5-39は、この永続性プロパティの値を説明しています。

表5-39 exclude-eclipselink-ormの有効値

Value

説明

true

eclipselink-orm.xmlファイルは使用されません。

false

(デフォルト) EclipseLinkでは、eclipselink-orm.xmlファイルが使用されます。

使用方法

デフォルトでは、リソース名META-INF/eclipselink-orm.xmlで最初に見つかったファイルが処理され、注釈および標準マッピング・ファイルに指定された構成がオーバーライドされます。

例

例5-35に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-35 persistence.xmlでのexclude-eclipselink-ormの使用

<property name="eclipselink.exclude-eclipselink-orm" value="true"/>

関連項目

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

- EclipseLinkの理解のEclipseLinkプロジェクトのビルディング・ブロックに関する項

- EclipseLinkソリューション・ガイドの外部メタデータ・ソースの使用に関する項

flush-clear.cache

eclipselink.flush-clear.cacheプロパティを使用して、flushメソッドに続いてclearメソッドが実行された場合のEclipseLink EntityManagerキャッシュの動作を指定します。

値

表5-40は、この永続性プロパティの値を説明しています。

表5-40 flush-clear.cacheの有効値

Value

説明

ドロップ

EclipseLinkによって、EntityManagerキャッシュ全体が削除されます。

これは最速のモードであり、メモリーの使用は最小となりますが、コミットを実行した後、共有キャッシュに含まれるデータが失効する可能性があります。

DropInvalidate

(デフォルト) EclipseLinkによって、EntityManagerキャッシュ全体が削除されます。コミットを実行した後、更新または削除されたオブジェクトが少なくとも1つ含まれるクラスは、共有キャッシュで無効になります。

このモードはDropよりも低速になりますが、(メモリーの使用量という点では)効率的であり、データの失効が回避されます。

Merge

EclipseLinkによって、EntityManagerキャッシュの、フラッシュされていないオブジェクトが削除されます。

このモードでは、コミットを実行した後、共有キャッシュが完全な状態に維持されますが、メモリー効率は最も低下します。非常に大規模なトランザクションでは、メモリーが不足する場合があります。

使用方法

このプロパティは、EntityManagerFactoryを作成するときに(createEntityManagerFactoryメソッドに渡すマップやpersistence.xmlファイルに)指定するか、またはEntityManagerを作成するときに(createEntityManagerメソッドに渡すマップに)指定できます。

前者は後者によってオーバーライドされることに注意してください。

例

例5-36に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-36 persistence.xmlでのflush-clear.cacheの使用

<property name="eclipselink.flush-clear.cache" value="Drop"/>

例5-37に、プロパティ・マップでこの拡張機能を使用する方法を示します。

例5-37 プロパティ・マップでのflush-clear.cacheの使用

import org.ecliplse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.FLUSH_CLEAR_CACHE,
FlushClearCache.Drop);

関連項目

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

- 「@Cache」

- EclipseLinkの理解のキャッシュ・コーディネーションに関する項

- EclipseLinkソリューション・ガイドのクラスタ内のTopLinkアプリケーションのスケーリングに関する項

id-validation

eclipselink.id-validationプロパティを使用して、値を無効とみなす主キーのコンポーネントを定義します。

値

表5-41は、この永続性プロパティの値を説明しています。

表5-41 id-validationの有効値

Value

説明

Negative

Numberを拡張しているIDおよびプリミティブ型のintとlongのIDには、Null、0および負の値は無効です。

None

EclipseLinkによるID検証は実行されません。

Null

Nullは無効ですが、他のすべての値は有効です。

Zero

プリミティブ型のintとlongのIDには、Null、0および負の値は無効です。

使用方法

アイデンティティおよび順序付け(shouldAlwaysOverrideExistingValueをtrueとして構成)は、既存のすべてのID値をオーバーライドします。

例

例5-38に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-38 persistence.xmlでのid-validationの使用

<property name="eclipselink.id-validation" value="NULL"/>

関連項目

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

- EclipseLinkの理解のオブジェクトの永続化に関する項

- 「@PrimaryKey」

jdbc.allow-native-sql-queries

eclipselink.jdbc.allow-native-sql-queriesプロパティを使用して、ユーザー定義(つまりネイティブ)のSQLを永続性ユニット内で許可するかどうかを指定します。

値

表5-42は、この永続性プロパティの値を説明しています。

表5-42 jdbc.allow-native-sql-queriesの有効値

Value

説明

true

(デフォルト) EclipseLinkでネイティブSQLを使用できます。

false

EclipseLinkでネイティブSQLを使用できません。

使用方法

マルチテナント内で、マルチテナント情報の公開による潜在的な影響を最小限に抑えるには、このオプションを使用します。デフォルトでは、永続性ユニットにマルチテナント・エンティティが含まれる場合、EclipseLinkではeclipselink.jdbc.allow-native-sql-queriesがfalseとして設定されます。

例

例5-39に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-39 persistence.xmlでのjdbc.allow-native-sql-queriesの使用

<property name="eclipselink.jdbc.allow-native-sql-queries" value="false" />

関連項目

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

- EclipseLinkの理解の問合せに関する項

jdbc.batch-writing

eclipselink.jdbc.batch-writingプロパティを使用してバッチ書込みを構成し、複数の書込み機能によってトランザクションが最適化されるようにします。

値

表5-43は、この永続性プロパティの値を説明しています。

表5-43 jdbc.batch-writingの有効値

Value

説明

jdbc

JDBCバッチ書込みを使用します。

buffered

JDBCバッチ書込みおよびプラットフォームのネイティブ・バッチ書込みを使用しません。

oracle-jdbc

Oracleプラットフォームのネイティブ・バッチ書込みを使用します。プロパティ・マップでは、OracleJDBCを使用します。

注意: このことには、Oracle JDBCドライバが必要となります。

custom-class

BatchWritingMechanismクラスを拡張するカスタム・クラス。

none

(デフォルト)バッチ書込みを使用しません(つまり、オフにします)。

使用方法

バッチ書込みを使用すると、複数の異機種間の動的SQL文を、1つの実行としてデータベースに送信することや、複数の異機種間のパラメータ化されたSQL文を、1つのバッチ実行として実行できます。

注意:
すべてのJDBCドライバやデータベースがバッチ書込みをサポートしているとはかぎりません。

eclipselink.jdbc.batch-writing.sizeを使用して、バッチ・サイズを指定します。

例

例5-40に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-40 persistence.xmlでのjdbc.batch-writingの使用

<property name="eclipselink.jdbc.batch-writing" value="Oracle-JDBC"/>

例5-41に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-41 プロパティ・マップでのjdbc.batch-writingの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.BATCH_WRITING,
BatchWriting.OracleJDBC);

関連項目

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

- 「jdbc.batch-writing.size」

- EclipseLinkソリューション・ガイドのバッチ書込みに関する項

jdbc.batch-writing.size

eclipselink.jdbc.batch-writing.sizeプロパティを使用して、バッチ書込みに使用するバッチ・サイズを構成します。

値

表5-44は、この永続性プロパティの値を説明しています。

表5-44 jdbc.batch-writing.sizeの有効値

Value

説明

バッチ・サイズ

パラメータ化されたバッチ書込みの場合、この値にはバッチにする文の数を指定します(デフォルト: 100)。

動的バッチ書込みの場合、この値にはバッチにするSQLバッファのサイズを指定します(デフォルト: 32k)。

例

例5-42に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-42 persistence.xmlでのjdbc.batch-writing.sizeの使用

<property name="eclipselink.jdbc.batch-writing.size" value="1000"/>

関連項目

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

- 「jdbc.batch-writing」

- EclipseLinkソリューション・ガイドのバッチ書込みに関する項

jdbc.cache-statements

eclipselink.jdbc.cache-statementsプロパティを使用して、JDBC文がキャッシュされるかどうかを指定します。

値

表5-45は、この永続性プロパティの値を説明しています。

表5-45 jdbc.cache-statementsの有効値

Value

説明

true

内部での文のキャッシングを有効にします。

false

(デフォルト)内部での文のキャッシングを無効にします。

使用方法

このプロパティは、EclipseLinkの内部接続プーリングを使用する場合に使用する必要があります。詳細は、「connection-pool」を参照してください。

例

例5-43に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-43 persistence.xmlでのjdbc.cache-statementsの使用

<property name="eclipselink.jdbc.cache-statements" value="false"/>

例5-44に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-44 プロパティ・マップでのjdbc.cache-statementsの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.CACHE_STATEMENTS, "false");

関連項目

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

- 「jdbc.cache-statements.size」

- 「connection-pool」

- EclipseLinkソリューション・ガイドのバッチ書込みに関する項

jdbc.cache-statements.size

eclipselink.jdbc.cache-statements.sizeプロパティを使用して、内部での文のキャッシングを使用する場合に保持する文の数を指定します。

値

表5-46は、この永続性プロパティの値を説明しています。

表5-46 jdbc.cache-statements.sizeの有効値

Value

説明

size

正の整数またはゼロを含む文字列値(デフォルト: 50)。

最大値は、使用するJDBCドライバに応じて変わる可能性があります。

例

例5-45に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-45 persistence.xmlでのjdbc.cache-statements.sizeの使用

<property name="eclipselink.jdbc.cache-statements.size" value="100"/>

例5-46に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-46 プロパティ・マップでのjdbc.cache-statements.sizeの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.CACHE_STATEMENTS_SIZE, "100");

関連項目

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

- 「jdbc.cache-statements」

- EclipseLinkソリューション・ガイドのバッチ書込みに関する項

jdbc.connector

eclipselink.jdbc.connectorプロパティを使用して、データベースに接続するカスタム・コネクタを定義します。

値

表5-47は、この永続性プロパティの値を説明しています。

表5-47 jdbc.connectorの有効値

Value

説明

完全修飾クラス名

Connectorインタフェースを実装するクラスです。

使用方法

このプロパティを使用すると、標準以外の接続プールに接続したり、接続の取得方法に関する詳細をカスタマイズできます。

このプロパティは、DataSourceまたはJDBC DriverManagerを使用する場合には不要です。

例

例5-47に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-47 persistence.xmlでのjdbc.connectorの使用

<property name="eclipselink.jdbc.connector" value="package.MyConnector"/>

jdbc.exclusive-connection.is-lazy

eclipselink.jdbc.exclusive-connection.is-lazyプロパティを使用して、EclipseLinkで書込み接続の遅延取得を行うかどうかを指定します。

値

表5-48は、この永続性プロパティの値を説明しています。

表5-48 jdbc.exclusive-connection.is-lazyの有効値

Value

説明

true

(デフォルト)書込み接続を遅延取得します。

false

書込み接続を遅延取得しません。

例

例5-48に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-48 persistence.xmlでのjdbc.exclusive-connection.is-lazyの使用

<property name="eclipselink.jdbc.exclusive-connection.is-lazy" value="false"/>

例5-49に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-49 プロパティ・マップでのjdbc.exclusive-connection.is-lazyの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.EXCLUSIVE_CONNECTION_IS_LAZY,
"false");

jdbc.exclusive-connection.mode

eclipselink.jdbc.exclusive-connection.modeプロパティを使用して、EclipseLinkでいつ書込み接続による読取りを実行するかを指定します。

値

表5-49は、この永続性プロパティの値を説明しています。

表5-49 jdbc.exclusive-connection.modeの有効値

Value

説明

Transactional

(デフォルト)一部またはすべてのエンティティで独立キャッシュが必要な場合には独立クライアント・セッションを作成し、それ以外の場合にはクライアント・セッションを作成します。

注意:

- EclipseLinkでは、トランザクションの継続期間中、接続を排他的に維持します。

- トランザクション内部では、EclipseLinkによって、すべての書込みおよび読取りが排他接続を介して実行されます。

- EclipseLinkトランザクション外部では、読取りごとに新しい接続が接続プールから取得され、問合せが実行されると即時に解放されます。

Isolated

独立エンティティを読み取る場合には排他独立クライアント・セッションを作成し、それ以外の場合にはエラーが発生します。

注意:

- EclipseLinkでは、所有するEntityManagerの存続期間中、接続を排他的に維持します。

- トランザクション内部では、EclipseLinkによって、すべての書込みおよび読取りが排他接続を介して実行されます。

- EclipseLinkトランザクション外部では、独立エンティティのみが排他接続によって読み取られます。非独立エンティティの場合、EclipseLinkでは、読取りごとに新しい接続が接続プールから取得され、問合せが実行されると即時に接続が解放されます。

Always

独立エンティティを読み取る場合には排他独立クライアント・セッションを作成し、それ以外の場合には排他クライアント・セッションを作成します。

注意: EclipseLinkでは、所有するEntityManagerの存続期間中、接続を排他的に維持し、すべての書込みおよび読取りを排他接続を介して実行します。

使用方法

このプロパティは、EntityManagerFactoryを作成するときに(createEntityManagerFactoryメソッドに渡すマップまたはpersistence.xmlファイルのいずれかに)設定するか、またはEntityManagerを作成するときに(createEntityManagerメソッドに渡すマップに)設定できます。前者は後者によってオーバーライドされることに注意してください。

例

例5-50に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-50 persitence.xmlでのjdbc.exclusive-connection.modeの使用

property name="eclipselink.jdbc.exclusive-connection.mode" value="Always"/>

例5-51に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-51 プロパティ・マップでのjdbc.exclusive-connection.modeの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.EXCLUSIVE_CONNECTION_MODE, "Always");

関連項目

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

- 「jdbc.exclusive-connection.is-lazy」

- EclipseLinkの理解の独立クライアント・セッションに関する項

- EclipseLinkの理解の接続に関する項

jdbc.native-sql

eclipselink.jdbc.native-sqlプロパティを使用して、EclipseLinkで汎用SQLを使用するか、またはプラットフォーム固有(つまりネイティブ)のSQL文を組み込むかを指定します。

値

表5-50は、この永続性プロパティの値を説明しています。

表5-50 jdbc.native-sqlの有効値

Value

説明

true

(デフォルト)プラットフォーム固有(ネイティブ)のSQLを使用します。

false

汎用SQLを使用します。

使用方法

プラットフォーム固有のSQLを使用する(eclipselink.jdbc.native-sql = true)場合、EclipseLinkでは、プラットフォーム固有のSQLを使用して、結合構文、日付演算子、順序付けの使用などをカスタマイズします。

例

例5-52に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-52 persistence.xmlでのjdbc.native-sqlの使用

<property name="eclipselink.jdbc.native-sql" value="false"/>

例5-53に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-53 プロパティ・マップでのjdbc.native-sqlの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.NATIVE_SQL, "false");

関連項目

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

- EclipseLinkの理解の問合せに関する項

- EclipseLinkの理解の問合せ言語に関する項

jdbc.property

eclipselink.jdbc.property接頭辞を使用して、JDBCドライバ固有の接続プロパティをEclipseLinkに渡します。

使用方法

JDBCドライバ固有のプロパティ名をこのプロパティの接頭辞に追加します。

例

例5-54に、persistence.xmlファイルでこのプロパティ接尾辞を使用する方法を示します。

例5-54 persistence.xmlでのjdbc.propertyの使用

<property name="eclipselink.jdbc.property.defaultRowPrefetch" value="25"/>

関連項目

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

- EclipseLinkソリューション・ガイドのOracle DatabaseでのTopLinkの使用に関する項

- EclipseLinkの理解のデータ・アクセスの概要に関する項

jdbc.sql-cast

eclipselink.jdbc.sql-castプロパティを使用して、EclipseLinkでプラットフォーム固有(つまりネイティブ)のCAST SQL操作を使用するかどうかを指定します。

注意:
通常、キャストは不要です。キャストを使用すると問題が発生することがあります。

値

表5-51は、この永続性プロパティの値を説明しています。

表5-51 jdbc.sql-castの有効値

Value

説明

true

プラットフォーム固有のCAST操作が使用されます。

false

(デフォルト)プラットフォーム固有のCAST操作は使用されません。

例

例5-55に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-55 persistence.xmlでのjdbc.sql-castの使用

<property name="eclipselink.jdbc.sql-cast" value="true"/>

jdbc.uppercase-columns

eclipselink.jdbc.uppercase-columnsプロパティを使用して、メタデータからの列名を強制的に大文字にします。

注意:
このパラメータはjpql.parserに置き換えられました。これにより、比較時に両方で大文字が使用されるようになります。

値

表5-52は、この永続性プロパティの値を説明しています。

表5-52 jdbc.uppercase-columnsの有効値

Value

説明

true

メタデータからのすべての列名が強制的に大文字になります。

false

(デフォルト)メタデータからの列名は強制的には大文字になりません。

使用方法

ネイティブSQL問合せを使用する場合、一部のプラットフォームについてJDBCメタデータから小文字の列名が返される可能性があります。マッピングでの列名が大文字である場合(デフォルト)、これらは一致しません。このパラメータを使用して、メタデータからのすべての列名を強制的に大文字にする必要があります。

例

例5-56に、persistence.xmlファイルでこのパラメータを使用する方法を示します。

例5-56 persistence.xmlでのjdbc.uppercase-column-namesの使用

<property name="eclipselink.jpa.uppercase-columns" value="true"/>

関連項目

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

- 「jpql.parser」

- EclipseLinkソリューション・ガイドのOracle DatabaseでのTopLinkの使用に関する項

- EclipseLinkの理解のデータ・アクセスの概要に関する項

jpql.parser

eclipselink.jpql.parserプロパティを使用して、JPQLパーサー・パラメータを構成します。

値

表5-53は、この永続性プロパティの値を説明しています。

表5-53 jpql.parserの有効値

Value

説明

org.eclipse.persistence.internal.jpa.jpql.HermesParser

(デフォルト)拡張されたJPQLサポートを提供する、EclipseLink 2.4以降の現在のパーサー

org.eclipse.persistence.queries.ANTLRQueryBuilder

下位互換性のために使用される古いパーサー(EclipseLink 2.4より前)

関連項目

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

- 「jpql.validation」

jpa.uppercase-column-names

eclipselink.jpa.uppercase-column-namesプロパティを使用して、JPA処理ですべての列名定義が大文字になるように指定します(大/小文字を区別しないのと同じ状態にします)。

値

表5-54は、この永続性プロパティの値を説明しています。

表5-54 jpa.uppercase-column-namesの有効値

Value

説明

true

データベースから返されるJDBCメタデータが大文字で返されるため、フィールドの大/小文字が一致します。jdbc.uppercase-columnsをtrueに設定します。

false

(デフォルト)JDBCメタデータは大文字で返されません。

使用方法

このプロパティを使用して、ユーザー定義のフィールドの大/小文字が、ネイティブ問合せに対してデータベースから返された大/小文字と一致しない状況を修正します。

例

例5-57に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-57 persistence.xmlでのjpa.uppercase-column-namesの使用

<property name="eclipselink.jpa.uppercase-column-names" value="true"/>

関連項目

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

- 「jdbc.uppercase-columns」

- EclipseLinkソリューション・ガイドのOracle DatabaseでのTopLinkの使用に関する項

- EclipseLinkの理解のデータ・アクセスの概要に関する項

jpql.validation

eclipselink.jpql.parserプロパティを使用して、JPQLパーサーの検証レベルを構成します。

値

表5-55は、この永続性プロパティの値を説明しています。

表5-55 jpql.validationの有効値

Value

説明

EclipseLink

(デフォルト) EclipseLink JPALの拡張機能を許可します。

JPA 1.0

有効なJPA 1.0 JPQLのみを許可します。

JPA 2.0

有効なJPA 2.0 JPQLのみを許可します。

JPA 2.1

有効なJPA 2.1 JPQLのみを許可します。

None

JPQL検証は行われません。

使用方法

このパラメータは、eclipselink.jpql.parserがHermesParserである場合にのみ適用されます。

例

例5-58に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-58 persistence.xmlでのjpql.validationの使用

<property name="eclipselink.jpql.validation" value="JPA 1.0"/>

関連項目

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

- 「jpql.parser」

- 「Java永続性問合せ言語の拡張機能」

logging.connection

eclipselink.logging.connectionプロパティを使用して、接続をログに記録するかどうかを指定します。

値

表5-56は、この永続性プロパティの値を説明しています。

表5-56 logging.connectionの有効値

Value

説明

true

(デフォルト)接続名が記録されます。

false

接続名は記録されません。

使用方法

このパラメータを使用すると、接続はすべて記録されアプリケーション・コードでマスクされません。

例

例5-59に、persistence.xmlファイルでこのパラメータを使用する方法を示します。

例5-59 persistence.xmlでのlogging.connectionの使用

<property name="eclipselink.logging.connection" value="false"/>

関連項目

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

- EclipseLinkソリューション・ガイドのTopLinkロギングを公開するためのWebLogic Serverの構成に関する項

- 「logging.level」

logging.exceptions

eclipselink.logging.exceptionsプロパティを使用して、例外がスローされた場合に、この例外をコール元のアプリケーションに返す前に記録するかどうかを指定します。

値

表5-57は、この永続性プロパティの値を説明しています。

表5-57 logging.exceptionsの有効値

Value

説明

true

(デフォルト)例外がスローされた場合に記録されます。

false

例外がスローされても記録されません。

使用方法

このプロパティを使用すると、確実にすべての例外が記録され、アプリケーション・コードによってマスクされません。

例

例5-60に、peristence.xmlファイルでこのプロパティを使用する方法を示します。

例5-60 persistence.xmlファイルでのlogging.exceptionsの使用

<property name="eclipselink.logging.exceptions" value="false" />

例5-61に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-61 プロパティ・マップでのlogging.exceptionsの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.LOGGING_EXCEPTIONS, "false");

関連項目

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

- EclipseLinkソリューション・ガイドのTopLinkロギングを公開するためのWebLogic Serverの構成に関する項

- 「logging.level」

logging.file

eclipselink.logging.fileプロパティを使用して、標準出力のかわりにログを出力するファイルの場所を指定します。

値

表5-58は、この永続性プロパティの値を説明しています。

表5-58 logging.fileの有効値

Value

説明

ディレクトリ名

書込みアクセス権限を持つディレクトリへの場所の文字列。この場所は、現在の作業ディレクトリまたは絶対位置に対して相対的に指定できます。

使用方法

このプロパティは、Java SE環境で使用される場合に適用されます。

例

例5-62に、peristence.xmlファイルでこのプロパティを使用する方法を示します。

例5-62 persistence.xmlファイルでのlogging.fileの使用

<property name="eclipselink.logging.file" value="C:\myout\" />

例5-63に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-63 プロパティ・マップでのlogging.fileの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.LOGGING_FILE, "C:\myout\");

関連項目

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

- EclipseLinkソリューション・ガイドのTopLinkロギングを公開するためのWebLogic Serverの構成に関する項

logging.level

eclipselink.logging.levelプロパティを使用して、特定のロギング・レベルを指定し、生成される量と詳細を制御します。

値

表5-59は、この永続性プロパティの値を説明しています。

表5-59 logging.levelの有効値

Value

説明

OFF

ロギングを無効化します。

ロギングのオーバーヘッドを回避するために、本番中にOFFを使用する場合があります。

SEVERE

EclipseLinkが続行できないことを示す例外、およびログイン時に生成されたすべての例外を記録します。これにはスタック・トレースが含まれます。

WARNING

SEVEREレベルで記録されないすべての例外など、EclipseLinkを強制的に停止しない例外を記録します。これにはスタック・トレースは含まれません。

INFO

(デフォルト)ユーザー名など、サーバー・セッションごとのログイン/ログアウトを記録します。セッションを取得すると、詳細情報が記録されます。

CONFIG

ログイン、JDBC接続およびデータベース情報のみを記録します。このログ・レベルは、デプロイメント時に使用する場合があります。

FINE

すべてのSQLを記録します。このログ・レベルは、デバッグおよびテスト時に使用する場合がありますが、本番では使用しません。

FINER

WARNINGと同様ですが、スタック・トレースが含まれます。このログ・レベルは、デバッグおよびテスト時に使用する場合がありますが、本番では使用しません。

FINEST

FINERと同様ですが、これにはその他の低レベル情報が含まれます。このログ・レベルは、デバッグおよびテスト時に使用する場合がありますが、本番では使用しません。

ALL

FINESTと同じレベルで記録します。

例

例5-64に、peristence.xmlファイルでこのプロパティを使用する方法を示します。

例5-64 persistence.xmlファイルでのlogging.levelの使用

<property name="eclipselink.logging.level" value="OFF" />

例5-65に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-65 プロパティ・マップでのlogging.levelの使用

import java.util.logging.Level;
import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.LOGGING_LEVEL, Level.OFF);

関連項目

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

- EclipseLinkソリューション・ガイドのTopLinkロギングを公開するためのWebLogic Serverの構成に関する項

logging.logger

eclipselink.logging.loggerプロパティを使用して、使用するログ出力のタイプを定義します。

値

表5-60は、この永続性プロパティの値を説明しています。

表5-60 logging.loggerの有効値

Value

説明

カスタム・ログ出力

org.eclipse.persistence.logging.SessionLogを実装するカスタム・ログ出力の完全修飾クラス名。

JavaLogger

java.util.loggingを使用します。

ServerLogger

アプリケーション・サーバーのロギングと統合します。

DefaultLogger

(デフォルト) EclipseLinkのネイティブ・ロギング(DefaultSessionLog)を使用します。

例

例5-66に、persistence.xmlファイルでこのパラメータを使用する方法を示します。

例5-66 persistence.xmlでのlogging.loggerの使用

<property name="eclipselink.logging.logger" value="JavaLogger"/>

例5-67に、プロパティ・マップでこのパラメータを使用する方法を示します。

例5-67 プロパティ・マップでのlogging.loggerの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.LOGGING_LOGGER,
"acme.loggers.MyCustomLogger";

logging.parameters

eclipselink.logging.parametersプロパティを使用して、SQLバインド・パラメータを例外およびログに含めるかどうかを定義します。

注意:
このパラメータは、バインド・パラメータにのみ適用されます。バインディングを使用しない場合、パラメータは常に表示されます。

値

表5-61は、この永続性プロパティの値を説明しています。

表5-61 logging.parametersの有効値

Value

説明

true

(デフォルト)パラメータが表示されます。

false

パラメータは表示されません。

使用方法

デフォルトでは、logging.levelにFINE (以上)を使用する場合、SQLバインド・パラメータが表示されます。このパラメータを使用して、デフォルト動作をオーバーライドします。

例

例5-58に、persistence.xmlファイルでこのパラメータを使用する方法を示します。

例5-68 persistence.xmlでのlogging.parametersの使用

<paramter name="eclipselink.logging.parameters" value="false"/>

関連項目

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

- 「logging.level」

- EclipseLinkソリューション・ガイドのTopLinkロギングを公開するためのWebLogic Serverの構成に関する項

logging.session

eclipselink.logging.sessionプロパティを使用して、EclipseLinkによって各ログ・メッセージにセッション識別子が含められるかどうかを指定します。

値

表5-62は、この永続性プロパティの値を説明しています。

表5-62 logging.sessionの有効値

Value

説明

true

(デフォルト)セッション識別子が記録されます。

false

セッション識別子は記録されません。

使用方法

この設定は、SQLなどのデータベース接続を必要とするメッセージ、および、どの基礎となるセッション(存在する場合)についてメッセージが送信されたかを判断するための、トランザクション情報を必要とするメッセージに適用可能です。

例

例5-69に、peristence.xmlファイルでこのプロパティを使用する方法を示します。

例5-69 persistence.xmlファイルでのlogging.sessionの使用

<property name="eclipselink.logging.session" value="false" />

例5-70に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-70 プロパティ・マップでのlogging.sessionの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.LOGGING_SESSION, "false");

関連項目

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

- EclipseLinkソリューション・ガイドのTopLinkロギングを公開するためのWebLogic Serverの構成に関する項

- 「logging.level」

logging.thread

eclipselink.logging.threadプロパティを使用して、EclipseLinkによって各ログ・メッセージにスレッド識別子が含められるかどうかを指定します。

値

表5-63は、この永続性プロパティの値を説明しています。

表5-63 logging.threadの有効値

Value

説明

true

(デフォルト)スレッド識別子が記録されます。

false

スレッド識別子は記録されません。

使用方法

このプロパティは、マルチスレッド・アプリケーションを実行する場合に使用する必要があります。EclipseLinkでは、スレッドのhashCodeが組み込まれます。

例

例5-71に、peristence.xmlファイルでこのプロパティを使用する方法を示します。

例5-71 persistence.xmlファイルでのlogging.threadの使用

<property name="eclipselink.logging.thread" value="false" />

例5-72に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-72 プロパティ・マップでのlogging.threadの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.LOGGING_THREAD, "false");

関連項目

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

- 「logging.level」

- EclipseLinkソリューション・ガイドのTopLinkロギングを公開するためのWebLogic Serverの構成に関する項

logging.timestamp

eclipselink.logging.timestampプロパティを使用して、EclipseLinkによって各ログ・メッセージにタイムスタンプが含められるかどうかを指定します。

値

表5-64は、この永続性プロパティの値を説明しています。

表5-64 logging.timestampの有効値

Value

説明

true

(デフォルト)タイムスタンプが記録されます。

false

タイムスタンプは記録されません。

例

例5-73に、peristence.xmlファイルでこのプロパティを使用する方法を示します。

例5-73 persistence.xmlファイルでのlogging.timestampの使用

<property name="eclipselink.logging.timestamp" value="false" />

例5-74に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-74 プロパティ・マップでのlogging.timestampの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.LOGGING_TIMESTAMP, "false");

関連項目

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

- EclipseLinkソリューション・ガイドのTopLinkロギングを公開するためのWebLogic Serverの構成に関する項

- 「logging.level」

metadata-source

eclipselink.metadata-sourceプロパティを使用して、EclipseLinkでメタデータの読取りに使用するMetadataSource実装を指定します。

値

表5-65は、この永続性プロパティの値を説明しています。

表5-65 metadata-sourceの有効値

Value

説明

XML

XMLMetadataSourceを使用してください。

カスタム・メタデータ・ソース

MetadataSourceを実装するカスタム・クラス名。

使用方法

このプロパティをeclipselink.metadata-source.xml.fileで使用し、永続性ユニット用の固定URLで外部マッピング・ファイルにアクセスします。

例

例5-75に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-75 persistence.xmlでのmetadata-sourceの使用

<property name="eclipselink.metadata-source" value="xml"/>
<property name="eclipselink.metadata-source.xml.file" value="c:/myfile.xml"/>

関連項目

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

- 「metadata-source.send-refresh-command」

- 「metadata-source.xml.file」

- metadata-source.xml.url

- EclipseLinkソリューション・ガイドの外部メタデータ・ソースの使用に関する項

metadata-source.properties.file

eclipselink.metadata-source.properties.fileプロパティを使用し、クラスローダーを使用してリソースを検索する場合に読み取られる、メタデータ・リポジトリのプロパティ・ファイルの名前を指定します。

値

表5-66は、この永続性プロパティの値を説明しています。

表5-66 metadata-repository.properties.fileの有効値

Value

説明

ファイル名

メタデータ・ソースXMLファイルの名前

使用方法

XMLリポジトリを使用する場合、このプロパティをeclipselink.metadata-sourceとともに使用します。

例

例5-76に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-76 persistence.xmlでのmetadata-source.properties.fileの使用

<property name="eclipselink.metadata-source.properties.file"
value="c:\myproperties.xml"/>

関連項目

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

- 「metadata-source」

- EclipseLinkソリューション・ガイドの外部メタデータ・ソースの使用に関する項

metadata-source.send-refresh-command

eclipselink.metadata-source.send-refresh-commandプロパティをクラスタ環境用のキャッシュ・コーディネーションとともに使用して、RCMリフレッシュ・メタデータ・コマンドをEclipseLinkがクラスタに送信する方法を制御します。

値

表5-67は、この永続性プロパティの値を説明しています。

表5-67 metadata-source.send-refresh-commandの有効値

Value

説明

true

(デフォルト)リフレッシュ・コマンドをクラスタに伝播するには、RCMを構成して、eclipselink.deploy-on-startupプロパティを使用する必要があります。

false

リフレッシュ・コマンドはクラスタに伝幡されません。

使用方法

キャッシュ・コーディネーションが構成されており、かつ、セッションが起動時にデプロイされている場合、このプロパティによって、RCMリフレッシュ・メタデータ・コマンドのクラスタへの送信が制御されます。

これらのコマンドによって、リモート・インスタンスでメタデータがリフレッシュされます。

例

例5-77に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-77 persistence.xmlでのmetadata-source.send-refresh-commandの使用

<property name="eclipselink.metadata-source-refresh-command" value="false"/>

例5-78に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-78 プロパティ・マップでのmetadata-source-refresh-commandの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.METADATA_SOURCE_RCM_COMMAND, "false");

関連項目

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

- 「metadata-source」

- 「deploy-on-startup」

- EclipseLinkソリューション・ガイドの外部メタデータ・ソースの使用に関する項

metadata-source.xml.file

eclipselink.metadata-repository.xml.fileプロパティを使用し、クラスローダーを使用してリソースを検索する場合に読み取られる、メタデータ・リポジトリのXMLファイルの名前を指定します。

値

表5-68は、この永続性プロパティの値を説明しています。

表5-68 metadata-source.xml.fileの有効値

Value

説明

ファイル名

メタデータrepository.xmlファイル。

使用方法

XMLリポジトリを使用する場合、このプロパティをeclipselink.metadata-sourceプロパティとともに使用します。

例

例5-79に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-79 persistence.xmlでのmetadata-source.xml.fileの使用

<property name="eclipselink.metadata-source" value="xml"/>
<property name="eclipselink.metadata-source.xml.file" value="c:/myfile.xml"/>

関連項目

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

- 「metadata-source」

- EclipseLinkソリューション・ガイドの外部メタデータ・ソースの使用に関する項

metadata-source.xml.url

eclipselink.metadata-source.xml.urlプロパティを使用して、外部マッピングファイルの場所を指定します。

値

表5-69は、この永続性プロパティの値を説明しています。

表5-69 metadata-source.xml.urlの有効値

Value

説明

url

メタデータ・リポジトリXMLのURLを指定します。

使用方法

metadata-sourceプロパティをXMLに設定する必要があります。

例

例5-75に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-80 persistence.xmlでのmetadata-source.xml.urlの使用

<property name="eclipselink.metadata-source" value="xml"/>
<property name="eclipselink.metadata-source.xml.url" value="http://myfile.xml"/>

関連項目

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

- 「metadata-source」

- EclipseLinkソリューション・ガイドの外部メタデータ・ソースの使用に関する項

multitenant.tenants-share-cache

eclipselink.multitenant.tenants-share-cacheをプロパティ使用して、マルチテナント・エンティティでL2キャッシュを共有するかどうかを指定します。

値

表5-70は、この永続性プロパティの値を説明しています。

表5-70 multitenant.tenants-share-cacheの有効値

Value

説明

true

マルチテナント・エンティティで、保護されたキャッシュが使用されます。

false

(デフォルト)マルチテナント・エンティティで、独立したキャッシュが使用されます。

使用方法

警告:

この設定がfalseであり、PROTECTED設定を使用している場合、キャッシュを使用する問合せにより、他のテナントからデータが返されることがあります。

例

例5-81に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-81 persistence.xmlでのmultitenant.tenants-share-cacheの使用

<property name="eclipselink.multitenant.tenants-share-cache" value="true" />

例5-82に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-82 プロパティ・マップでのmultitenant.tenants-share-cacheの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.MULTITENANT_TENANTS_SHARE_CACHE,
"true");

関連項目

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

- 「@Multitenant」

- EclipseLinkソリューション・ガイドのマルチテナンシの使用に関する項

multitenant.tenants-share-emf

eclipselink.multitenant.shared-emfプロパティを使用して、共有エンティティ・マネージャ・ファクトリ内でマルチテナント・エンティティを使用するかどうかを指定します。

値

表5-71は、この永続性プロパティの値を説明しています。

表5-71 multitenant.tenants-share-emfの有効値

Value

説明

true

(デフォルト)マルチテナント・エンティティが使用されます。

false

一意のセッション名を指定します。

使用方法

falseに設定する場合は、一意のセッション名を指定する必要があります。

例

例5-83に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-83 persistence.xmlでのmultitenant.tenants-share-emfの使用

<property name="eclipselink_multitenant_tenants_share_emf" value="true" />

関連項目

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

- 「@Multitenant」

- EclipseLinkソリューション・ガイドのマルチテナンシの使用に関する項

nosql.connection-factory

eclipselink.nosql.connection-factoryプロパティを使用して、JCA ConnectionFactoryのJNDI名またはNoSQLデータ・ソースに接続するJCA ConnectionFactoryのクラス名を指定します。

値

表5-72は、この永続性プロパティの値を説明しています。

表5-72 nosql.connection-factoryの有効値

Value

説明

コネクション・ファクトリ

JCAコネクション・ファクトリのJNDI名またはクラス名。

使用方法

このプロパティを使用すると、JCA ConnectionFactoryをNoSqlまたはNoSQLデータ・ソース(つまり、レガシー・データベース、NoSQLデータベース、XMLデータベース、トランザクション・システムやメッセージ・システム、ERPシステムなどの非リレーション・データ・ソース)用のEISアダプタとともに使用できます。

例

例5-84に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-84 persistence.xmlでのnosql.connection-factoryの使用

<property name="eclipselink.nosql.connection-factory"
value="MyConnectionFactory" />

関連項目

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

- 「@NoSql」

- 「nosql.property」

- EclipseLinkの理解のNoSQLデータベースの使用に関する項

- EclipseLinkソリューション・ガイドのEclipseLinkと非リレーショナル・データベースの使用に関する項

nosql.connection-spec

eclipselink.nosql.connection-specプロパティを使用して、NoSQLデータ・ソースへの接続方法を定義するEISConnectionSpecクラス名を指定します。

値

表5-73は、この永続性プロパティの値を説明しています。

表5-73 nosql.connection-specの有効値

Value

説明

クラス名

IESConnectionSpecクラス名

使用方法

このプロパティを使用すると、JCA ConnectionFactoryをNoSqlまたはNoSQLデータソース(つまり、レガシー・データベース、NoSQLデータベース、XMLデータベース、トランザクション・システムやメッセージ・システム、ERPシステムなどの非リレーション・データソース)用のEISアダプタとともに使用できます。

例

このプロパティの使用方法の詳細は、例5-85を参照してください。

関連項目

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

- 「@NoSql」

- 「nosql.property」

- EclipseLinkの理解のNoSQLデータベースの使用に関する項

- EclipseLinkソリューション・ガイドのEclipseLinkと非リレーショナル・データベースの使用に関する項

nosql.property

eclipselink.nosql.propertyプロパティを使用して、NoSQL固有の接続プロパティを設定します。

値

表5-74は、この永続性プロパティの値を説明しています。

表5-74 nosql.propertyの有効値

Value

説明

プロパティ名

NoSQLプロパティ。

使用方法

NoSQL固有のプロパティ名をこのプロパティに追加します。

例

例5-85に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-85 persistence.xmlでのnosql.propertyの使用

<persistence 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 persistence_2_0.xsd"
version="2.0">
<persistence-unit name="acme" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.target-database"
value="org.eclipse.persistence.nosql.adapters.mongo.MongoPlatform"/>
<property name="eclipselink.nosql.connection-spec"
value="org.eclipse.persistence.nosql.adapters.mongo.MongoConnectionSpec"/>
<property name="eclipselink.nosql.property.mongo.port" value="27017,
27017"/>
<property name="eclipselink.nosql.property.mongo.host" value="host1,
host2"/>
<property name="eclipselink.nosql.property.mongo.db" value="acme"/>
</properties>
</persistence-unit>
</persistence>

関連項目

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

- 「@NoSql」

- EclipseLinkの理解の非SQLデータベースの使用に関する項

- 「nosql.connection-factory」

- 「nosql.connection-spec」

oracle.proxy-type

eclipselink.oracle.proxy-typeプロパティを使用して、OracleConnection.openProxySessionメソッドに渡すプロキシ・タイプを指定します。

値

表5-75は、この永続性プロパティの値を説明しています。

表5-75 oracle.proxy-typeの有効値

Value

説明

USER_NAME

このタイプでは、プロキシ接続を作成する際の認証にユーザー名が使用されます。

DISTINGUISED_NAME

このタイプでは、プロキシ接続を作成する際の認証に識別名が使用されます。

CERTIFICATE

このタイプでは、プロキシ接続を作成する際の認証にデジタル証明書が使用されます。

使用方法

このプロパティにはOracle JDBCバージョン10.1.0.2以上が必要であり、eclipselink.target-databaseが、Oracle9以上を使用するように構成されている必要があります。

通常、createEntityManagerメソッドを使用するか、またはEntityManagerImplで独自のsetPropertiesメソッドを使用して、このプロパティをEntityManagerに設定する必要があります。これにより、トランザクション内で書込みおよび読取りを行う際に、EntityManagerでプロキシ接続が使用されます。

proxy-typeおよび対応するproxyプロパティがEntityManagerFactoryに設定されている場合、ファクトリによって作成されるすべての接続はプロキシ接続となります。

例

例5-86に、EntityManagerでこのプロパティを使用する方法を示します。

例5-86 EntityManagerでのeclipselink.oracle.proxy-typeの使用

Map emProperties = new HashMap();
emProperties.put("eclipselink.oracle.proxy-type",
OracleConnection.PROXYTYPE_USER_NAME);
emProperties.put(OracleConnection.PROXY_USER_NAME, "john");
EntityManager em = emf.createEntityManager(emProperties);

インジェクションを使用する場合:

entityManager.setProperty(”eclipselink.oracle.proxy-type”,
OracleConnection.PROXYTYPE_USER_NAME);
entityManager.setProperty(OracleConnection.PROXY_USER_NAME, ”john”);

関連項目

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

- 「target-database」

orm.throw.exceptions

eclipselink.orm.throw.exceptionsプロパティを使用して、persistence.xmlファイルの<mapping-file>要素に指定されたファイルのいずれかに問題が発生した場合に、例外をスローするか、または警告を記録するかを指定します。

値

表5-76は、この永続性プロパティの値を説明しています。

表5-76 orm.throw.exceptionsの有効値

Value

説明

true

(デフォルト)例外をスローします。

false

警告の記録のみを行います。

例

例5-87に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-87 persistence.xmlでのorm.throw.exceptionsの使用

<property name="oracle.orm.throw.exceptions" value="false"/>

例5-88に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-88 プロパティ・マップでのorm.throw.exceptionsの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.ECLIPSELINK_ORM_THROW_EXCEPTIONS,
"false");

関連項目

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

- 「exception-handler」

orm.validate.schema

orm.validate.schemaプロパティを使用して、orm.xmlのスキーマ検証をデフォルト値であるfalseからオーバーライドします。

値

表5-77は、この永続性プロパティの値を説明しています。

表5-77 orm.validate.schemaの有効値

Value

説明

true

orm.xmlファイルのスキーマ検証を有効にします。

false

(デフォルト)orm.xmlファイルのスキーマ検証は行われません。

使用方法

orm.validate.schemaを使用してorm.xmlのスキーマ検証を有効にします。

例

例5-89に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-89 persistence.xmlでのorm.validate.schemaの使用

<property name="eclipselink.orm.validate.schema" value="true"/>

例5-90に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-90 プロパティ・マップでのorm.validate.schemaの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertyMap.put(PersistenceUnitProperties.ORM_VALIDATE_SCHEMA, "true");

partitioning

eclipselink.partitioningプロパティを使用して、永続性ユニットにデフォルトのPartitioningPolicyを設定します。この値は、定義された既存のPartitioningPolicyの名前である必要があります。

値

表5-78は、この永続性プロパティの値を説明しています。

表5-78 partitioningの有効値

Value

説明

name

定義された既存のPartitioningPolicy

使用方法

このプロパティを使用して、複数の異なるデータベース間またはOracle RACなどのデータベース・クラスタ全体で、クラスのデータをパーティション化します。パーティション化によって、複数のデータベース・マシンが要求を処理できるようになり、スケーラビリティを向上させることができます。

複数のパーティションを使用して単一のトランザクションを処理する場合は、XAトランザクションを適切にサポートするために、JavaトランザクションAPI (JTA)を使用します。

例

例5-91に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-91 persistence.xmlでのpartitioningの使用

<property name="eclipselink.partitioning" value="Replicate" />

関連項目

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

- 「@Partitioning」

partitioning.callback

eclipselink.partitioning.callbackプロパティを使用して、外部DataSourceのアフィニティ・サポート(UCPなど)を統合します。

値

表5-79は、この永続性プロパティの値を説明しています。

表5-79 eclipselink.partitioning.callbackの有効値

Value

説明

value

DataPartitioningCallBackインタフェースを実装するクラス。

使用方法

値には完全なクラス名を設定する必要があります。

例

例5-92に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-92 persistence.xmlでのpartitioning.callbackの使用

<property name="eclipselink.partitioning.callback"
value="mypacakge.MyDataPartitioningCallback"/>

例5-93に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-93 プロパティ・マップでのpartitioning.callbackの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.PARTITIONING_CALLBACK,
"mypackage.MyDataPartitioningCallback");

persistence-context.close-on-commit

eclipselink.persistence-context.close-on-commitプロパティを使用して、コミット後にEntityManagerを閉じるか、または使用しないようにするか(延長なし)を指定します。

値

表5-80は、この永続性プロパティの値を説明しています。

表5-80 persistence-context.close-on-commitの有効値

Value

説明

true

コミット後にEntityManagerを閉じます。

false

(デフォルト)コミット後にEntityManagerを閉じません。

使用方法

コンテナ管理のEntityManagerやほとんどの管理対象アプリケーションでは、通常このプロパティをfalseに設定します。この設定により、commit()トランザクションの後に永続性コンテキストが再開されてパフォーマンスのオーバーヘッドが増加することを回避できます。

このプロパティをpersistence.xmlに設定するか、またはcreateEntityManagerFactoryに渡すと、ファクトリによって作成されるすべてのEntityManagersに影響を及ぼします。または、このプロパティを特定のEntityManagersに適用するには、createEntityManagerメソッドに渡します。

例

例5-94に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-94 persistence.xmlでのpersistence-context.close-on-commitの使用

<property name="eclipselink.persistence-context.close-on-commit" value="true"/>

例5-95に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-95 プロパティ・マップでのpersistence-context.close-on-commitの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.PERSISTENCE_CONTEXT_CLOSE_ON_COMMIT,
"true");

persistence-context.commit-without-persist-rules

eclipselink.persistence-context.commit-without-persist-rulesプロパティを使用して、EntityManagerですべての管理対象オブジェクトを検索し、管理されていない新規の関連オブジェクトが見つかった場合は、CascadeType.PERSIST設定が欠落していても無視して永続化するかどうかを指定します。

値

表5-81は、この永続性プロパティの値を説明しています。

表5-81 persistence-context.commit-without-persist-rulesの有効値

Value

説明

true

エンティティ・ライフサイクルのPersist操作を関連エンティティにカスケードし、CascadeType.PERSIST設定を使用します。

false

(デフォルト)エンティティ・ライフサイクルのPersist操作を関連エンティティにカスケードしません。また、CascadeType.PERSIST設定も使用しません。

使用方法

このプロパティをtrueに設定すると、EclipseLinkの従来のネイティブ機能がレプリケートされます。

例

例5-96に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-96 persistence.xmlでのpersistence-context.commit-without-persist-rulesの使用

<property name="eclipse.persistence-context.commit-without-persist-rules"
value="true"/>

例5-97に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-97 プロパティ・マップでのpersistence-context.commit-without-persist-rulesの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put
(PersistenceUnitProperties.PERSISTENCE_CONTEXT_COMMIT_WITHOUT_PERSIST_RULES,
"true");

persistence-context.flush-mode

eclipselink.persistence-context.flush-modeプロパティを使用して、EntityManager FlushModeを永続性プロパティとして設定されるよう構成し、いつフラッシュを行うかを指定します。

値

表5-82は、この永続性プロパティの値を説明しています。

表5-82 persistence-context.flush-modeの有効値

Value

説明

auto

(デフォルト)フラッシュは、問合せの実行時に行われます。

commit

フラッシュは、トランザクションのコミット時に行われます。

使用方法

このプロパティをpersistence.xmlに設定するか、またはcreateEntityManagerFactoryに渡すと、ファクトリによって作成されるすべてのEntityManagersに影響を及ぼします。このプロパティを特定のEntityManagersに適用するには、createEntityManagerメソッドに渡します。

例

例5-98に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-98 persistence.xmlでのpersistence-context.flush-modeの使用

<property name="eclipselink.persistence-context.flush-mode" value="commit" />

例5-99に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-99 プロパティ・マップでのpersistence-context.flush-modeの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.PERSISTENCE_CONTEXT_FLUSH_MODE,
"false");

関連項目

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

- 「flush」

- EclipseLinkソリューション・ガイドのパフォーマンスの拡張に関する項

persistence-context.persist-on-commit

eclipselink.persistence-context.persist-on-commitプロパティを使用して、EntityManagerですべての管理対象オブジェクトを検索し、管理されていない新規の関連オブジェクトのうち、カスケード永続化が設定されたものをすべて永続化するかどうかを指定します。これを使用すると、新規オブジェクトに対して常に永続化が使用される場合に、この検索を実行する負荷を回避できます。

値

表5-83は、この永続性プロパティの値を説明しています。

表5-83 persistence-context.persist-on-commitの有効値

Value

説明

true

(デフォルト)管理されていない新規の関連オブジェクトのうち、カスケード永続化が設定されたものに対して検索および永続化を行います。

false

管理されていない新規の関連オブジェクトのうち、カスケード永続化が設定されたものに対して検索および永続化を行いません。

使用方法

このプロパティをpersistence.xmlに設定するか、またはcreateEntityManagerFactoryに渡すと、ファクトリによって作成されるすべてのEntityManagersに影響を及ぼします。このプロパティを特定のEntityManagersに適用するには、createEntityManagerメソッドに渡します。

例

例5-100に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-100 persistence.xmlでのpersistence-context.persist-on-commitの使用

<property name="eclipselink.persistence-context.persist-on-commit" value="false"/>

例5-101に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-101 プロパティ・マップでのpersistence-context.persis-on-commitの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.PERSISTENCE_CONTEXT_PERSIST_ON_COMMIT,
"false");

persistence-context.reference-mode

eclipselink.persistence-context.reference-modeプロパティを使用して、永続性コンテキスト内でハード参照とソフト(つまり弱い)参照のどちらを使用するかを指定します。

値

表5-84は、この永続性プロパティの値を説明しています。

表5-84 persistence-context.reference-modeの有効値

Value

説明

hard

(デフォルト) EclipseLinkにより、ハード参照を使用してすべてのオブジェクトが参照されます。参照アーティファクト(永続性コンテキストや作業ユニットなど)を解放、消去または閉じるまで、これらのオブジェクトをガベージ・コレクションに使用することはできません。

weak

アクティブ属性の変更追跡(「@ChangeTracking」を参照)をサポートするオブジェクトへの参照は、弱参照によって保持されます。つまり、直接的または間接的に参照されなくなったすべてのオブジェクトは、ガベージ・コレクションに使用できるようになります。変更追跡の対象オブジェクトが変更されると、該当するオブジェクトはハード参照に移動され、フラッシュされるまでガベージ・コレクションに使用できなくなります。

注意: これらのエンティティ内でフラッシュされなかった変更は、すべて失われます。

アクティブ属性の変更追跡をサポートしないオブジェクトに加えて、新規および削除されたオブジェクトもハード参照によって保持され、ガベージ・コレクションに使用することはできません。

force_weak

変更追跡の対象外であるオブジェクトを含むすべてのオブジェクトは、弱参照によって保持されます。変更追跡の対象オブジェクト(「@ChangeTracking」を参照)が変更されると、該当するオブジェクトはハード参照に移動され、フラッシュされるまでガベージ・コレクションに使用できなくなります。ただし、アクティブ属性の変更追跡をサポートしないすべてのオブジェクトは、それらの変更がデータベースにフラッシュされる前にガベージ・コレクトされる場合があるため、変更が失われる可能性があります。

新規および削除されたオブジェクトはハード参照によって保持され、ガベージ・コレクションに使用することはできません。

使用方法

このプロパティをpersistence.xmlに設定するか、またはcreateEntityManagerFactoryに渡すと、ファクトリによって作成されるすべてのEntityManagersに影響を及ぼします。このプロパティを特定のEntityManagersに適用するには、createEntityManagerメソッドに渡します。

例

例5-102に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-102 persistence.xmlでのpersistence-context.reference-modeの使用

<property name="eclipselink.persistence-context.reference-mode"
value="FORCE_WEAK"/>

例5-103に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-103 プロパティ・マップでのpersistence-context.reference-modeの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.PERSISTENCE_CONTEXT_REFERENCE_MODE,
ReferenceMode.FORCE_WEAK);

関連項目

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

- 「@ChangeTracking」

persistenceunits

eclipselink.persistenceunitsプロパティを使用して、標準モデルの生成時に処理する永続性ユニットの名前セットを指定します。デフォルトでは、EclipseLinkにより、すべての永続性XMLファイル内で使用可能なすべての永続性ユニットが使用されます。

値

表5-85は、この永続性プロパティの値を説明しています。

表5-85 persistenceunitsの有効値

Value

説明

名前

永続性ユニットのカンマ区切りリスト

注意: 複数の永続性ユニットを指定する場合、永続性ユニットの名前にカンマ( , )を使用することはできません。

例

例5-104に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-104 persistence.xmlでのpersistenceunitsの使用

<property name="eclipselink.persistenceunits" value="mypu1, mypu2"/>

persistencexml

eclipselink.persistencexmlプロパティを使用して、永続性XMLファイルの検索対象となる完全なリソース名を指定します。省略する場合、EclipseLinkでは、デフォルトの場所META-INF/persistence.xmlが使用されます。

注意:
現在、このプロパティは標準のモデル・ジェネレータにのみ使用されています。

値

表5-86は、この永続性プロパティの値を説明しています。

表5-86 persistencexmlの有効値

Value

説明

リソース名

persistence.xmlファイルの場所。

使用方法

このプロパティは、EclipseLinkで構成ファイルを検索するときにのみ使用されます。EJB/Springコンテナ内においてコンテナ管理モードで使用した場合、このファイルの検索と読取りはコンテナによって行われ、この構成は使用されません。

デフォルトの場所を変更する場合は、persisencexml.defaultを使用します。

例

例5-105に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-105 persistence.xmlでのpersistencexmlの使用

<property name="eclipselink.persistencexml" value="resources/persistence.xml"/>

関連項目

詳細は、:persisencexml.defaultを参照してください

persisencexml.default

eclipselink.persistencexml.defaultプロパティを使用して、persistence.xml構成ファイルが配置されるデフォルトのリソースの場所を指定します。デフォルトの場所はMETA-INF/persistence.xmlです。

値

表5-87は、この永続性プロパティの値を説明しています。

表5-87 persistencexml.defaultの有効値

Value

説明

リソースの場所

persistence.xmlファイルのデフォルトのリソースの場所。

例

例5-106に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-106 プロパティ・マップでのpersistencexml.defaultの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML_DEFAULT,
"resources/persistence.xml");

profiler

eclipselink.profilerプロパティを使用して、実行時統計を取得するために使用するパフォーマンス・プロファイラを指定します。

値

表5-88は、この永続性プロパティの値を説明しています。

表5-88 profilerの有効値

Value

説明

NoProfiler

(デフォルト)パフォーマンス・プロファイラは使用されません。

PerformationMonitor

EclipseLinkパフォーマンス・モニターorg.eclipse.persistence.tools.profiler.PerformanceMonitorを使用します。

PerformanceProfiler

EclipseLinkパフォーマンス・プロファイラを使用します(org.eclipse.persistence.tools.profiler.PerformanceProfiler)。

QueryMonitor

問合せ実行およびキャッシュ・ヒットを監視します(org.eclipse.persistence.tools.profiler.QueryMonitorクラス)。

このオプションにより、問合せ実行およびキャッシュ・ヒットのパフォーマンスを測定するための低オーバーヘッドの単純な方法が提供されます。複雑なシステムでのパフォーマンス分析に、このオプションを使用することが必要な場合があります。

DMSProfiler

org.eclipse.persistence.tools.profiler.oracle.DMSPerformanceProfilerを使用してください。このプロパティは、Oracle Dynamic Monitoring Service (DMS)に固有です。

カスタム・プロファイラ

SessionProfilerを実装するカスタム・プロファイラ・クラス名を指定して、引数を持たないコンストラクタを指定します。

例

例5-107に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-107 persistence.xmlでのprofilerの使用

<property name="eclipselink.profiler" value="PerformanceProfiler"/>

例5-108に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-108 プロパティ・マップでのprofilerの使用

import org.eclipse.persistence.config.ProfilerType;
import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.PROFILER,
ProfilerType.PerformanceProfiler);

関連項目

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

- EclipseLinkソリューション・ガイドのパフォーマンスの測定に関する項

session.customizer

eclipselink.session.customizerプロパティを使用して、org.eclipse.persistence.config.SessionCustomizerインタフェースを実装するセッション・カスタマイザ・クラスを指定します。このクラスは、デフォルトの引数を使用しないコンストラクタを提供する必要があります。

値

表5-89は、この永続性プロパティの値を説明しています。

表5-89 session.customizerの有効値

Value

説明

クラス名

SessionCustomizerクラスの完全修飾クラス名。

使用方法

(org.eclipse.persistence.sessions.Sessionを値として使用する)クラスのカスタマイズ・メソッドを使用すると、拡張されたEclipseLinkセッションAPIにプログラムによってアクセスできます。セッション・カスタマイザ・クラスを使用して、複数のセッション・イベント・リスナーを定義できます。

例

例5-109に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-109 persistence.xmlでのsession.customizerの使用

<property name="eclipselink.session.customizer"
value="acme.sessions.MySessionCustomizer"/>

例5-110に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-110 プロパティ・マップでのsession.customizerの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.SESSION_CUSTOMIZER,
"acme.sessions.MySessionCustomizer");

関連項目

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

- 「session-event-listener」

session.include.descriptor.queries

eclipselink.session.include.descriptor.queriesプロパティを使用して、すべてのディスクリプタの名前付き問合せをセッションにコピーして、エンティティ・マネージャから利用できるようにするかどうかを指定します。

値

表5-90は、この永続性プロパティの値を説明しています。

表5-90 session.include.descriptor.queriesの有効値

Value

説明

true

コピーを有効化します。

false

(デフォルト)コピーを無効化します。

例

例5-111に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-111 persistence.xmlでのsession.include.descriptor.queriesの使用

<property name="eclipselink.session.include.descriptor.queries" value="true"/>

例5-112に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-112 プロパティ・マップでのsession.include.descriptor.queriesの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.INCLUDE_DESCRIPTOR_QUERIES, "true");

session-event-listener

eclipselink.session-event-listenerプロパティを使用して、ブートストラップ中に追加するディスクリプタ・イベント・リスナーを指定します。

値

表5-91は、この永続性プロパティの値を説明しています。

表5-91 session-event-listenerの有効値

Value

説明

クラス名

org.eclipse.persistence.sessions.SessionEventListenerインタフェースを実装するクラスの完全修飾クラス名

使用方法

複数のイベント・リスナーを定義するには、session.customizerクラスを使用します。

例

例5-113に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-113 persistence.xmlでのsession-event-listenerの使用

<property name="eclipselink.session-event-listener"
value="mypackage.MyClass.class"/>

例5-113に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-114 プロパティ・マップでのsession-event-listenerの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.SESSION_EVENT_LISTENER_CLASS,
"mypackage.MyClass.class");

関連項目

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

- 「session.customizer」

session-name

eclipselink.session-nameプロパティを使用して、SessionManager内でシングルトン・サーバー・セッションを格納するときに使用する一意の名前を構成します。

値

表5-92は、この永続性プロパティの値を説明しています。

表5-92 session.nameの有効値

Value

説明

名前

デフォルト(EclipseLinkにより生成されたセッション名)のかわりに使用する一意のセッション名。

使用方法

デフォルトでは、EclipseLinkにより一意のセッション名が生成されます。このプロパティを使用して、一意のカスタム・セッション名を指定できます。

sessions-xmlファイルを使用する場合、このセッション名をsessions-xmlファイルにセッション名として含める必要があります。

例

例5-115に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-115 persistence.xmlでのsession-nameの使用

<property name="eclipselink.session-name" value="MySession"/>

例5-116に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-116 プロパティ・マップでのsession-nameの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.SESSION_NAME, "MySession");

関連項目

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

- 「sessions-xml」

sessions-xml

図5-1に示すように、eclipselink.sessions-xmlプロパティを使用して、(project.xmlファイルを参照する)指定されたネイティブのsessions.xml構成ファイルにより、JPA注釈やEclipseLink XMLを使用せずに構成およびマッピング情報をロードします。

値

表5-93は、この永続性プロパティの値を説明しています。

表5-93 sessions-xmlの有効値

Value

説明

構成ファイル

セッションXMLファイルのリソース名。このプロパティに値を指定しない場合、このプロパティは使用されません。

使用方法

注釈およびデプロイメントXMLを使用するかわりに、eclipselink.sessions-xmlプロパティを使用できます。このプロパティを使用すると、EclipseLinkでは、図5-1に示すように、このメタデータに基づいてインメモリーEclipseLinkセッションおよびプロジェクトが構築されます。EclipseLink sessions.xmlのみを使用してすべてのエンティティの定義などを行った後、永続性マネージャを取得して使用できます。

図5-1 eclipselink.sessions-xml永続性プロパティの使用

例

例5-117に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-117 persistence.xmlファイルでのsessions-xmlの使用

<property name="eclipselink.sessions-xml" value="mysession.xml"/>

例5-118に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-118 プロパティ・マップでのsessions-xmlの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.SESSIONS_XML, "mysession.xml");

関連項目

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

- 「オーバーライドおよびマージ」

target-database

eclipselink.target-databaseプロパティを使用して、指定したデータベースのカスタム操作やSQL生成を制御する際に使用するデータベースを指定します。

値

表5-94は、この永続性プロパティの値を説明しています。

表5-94 target-databaseの有効値

Value

説明

TargetDatabaseクラスで定義された値またはDatabasePlatformを拡張する完全修飾クラス名

ご使用のデータベースを指定します。

- Attunity

- 自動(デフォルト): EclipseLinkにより、データベースおよびJDBCメタデータへのアクセスが試行され、ターゲット・データベースが決定されます。

- Cloudscape

- データベース: ターゲット・データベースがリストされておらず、ご使用のJDBCドライバで「自動」に必要なメタデータがサポートされていない場合、汎用データベースを使用します。

- DB2

- DB2Mainframe

- DBase

- Derby

- HSQL

- Informix

- JavaDB

- MaxDB

- MySQL

- MySQL4

- Oracle

- Oracle10

- Oracle11

- Oracle8

- Oracle9

- PointBase

- PostgreSQL

- SQLAnywhere

- SQLServer

- Sybase

- Symfoware

- TimesTen

使用方法

eclipselink.validation-only = trueの場合、「自動」クラス名または短縮名は使用できません。

例

例5-119に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-119 persistence.xmlでのtarget-databaseの使用

<property name="eclipselink.target-database" value="Oracle"/>

または

<property name="eclipselink.target-database"
value="org.eclipse.persistence.platform.database.HSQLPlatform"/>

例5-120に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-120 プロパティ・マップでのtarget-databaseの使用

import org.eclipse.persistence.config.TargetDatabase;
import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.TARGET_DATABASE, TargetDatabase.Oracle);

target-server

eclipselink.target-serverプロパティを使用して、ホスト・コンテナとの統合を有効化するのに使用されるServerPlatformを構成します。

値

表5-95は、この永続性プロパティの値を説明しています。

表5-95 target-serverの有効値

Value

説明

TargetServerクラスで定義される値

ご使用のアプリケーション・サーバーを指定します。

- JBoss: JBoss Application Server

- OC4J: OC4J永続性プロバイダ

- SAPNetWeaver_7_1: SAP NetWeaver Application Server 7.1 (以上)

- SunAS9: Sun Application Server 9

- WebLogic: Oracle WebLogic Server

- WebLogic_10: Oracle WebLogic Server 10

- WebLogic_9: Oracle WebLogic Server 9

- WebSphere: IBM WebSphere

- WebSphere_6_1: IBM WebSphere 6.1

- WebSphere_7: IBM WebSphere 7

- WebSphere_Liberty: IBM WebSphere Liberty

- Default (TargetServer.None)

使用方法

指定された値に加えて、プラットフォームの完全なクラス名を指定することにより、カスタム・サーバー・プラットフォームを指定できます。

ExternalTransactionControllerを実装するクラス名を指定すると、このコントローラにCustomServerPlatformが設定されます。

例

例5-121に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-121 persistence.xmlでのtarget-serverの使用

<property name="eclipselink.target-server" value="OC4J_10_1_3"/>

例5-122に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-122 プロパティ・マップでのUsing target-serverの使用

import org.eclipse.persistence.config.TargetServer;
import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put(PersistenceUnitProperties.TARGET_SERVER,
TargetServer.OC4J_10_1_3);

関連項目

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

- EclipseLinkソリューション・ガイド

- EclipseLinkの理解のEclipseLinkとアプリケーション・サーバーの統合に関する項およびTopLinkデータベースとアプリケーション・サーバーのサポートに関する項

temporal.mutable

eclipselink.temporal.mutableプロパティを使用して、一時フィールド(Date、Calendar)への変更を検出する場合のデフォルトを構成します。

値

表5-96に、この永続性プロパティの値を示します。

表5-96 temporal.mutableの有効値

Value

説明

true

オブジェクトへの変更が検出されます。属性変更追跡のウィービングは無効化されます。

false

(デフォルト)オブジェクト自体への変更は検出されません。

使用方法

デフォルトでは、一時フィールドが置換されると想定され、一時オブジェクトは直接変更されません。

例

例5-123に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-123 persistence.xmlでのtemporal.mutableの使用

<property name="eclipselink.temporal.mutable" value="true"/>

例5-124に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-124 プロパティ・マップでのtemporal.mutableの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertyMap.put(PersistenceUnitProperties.TEMPORAL_MUTABLE,
"true");

tenant-id

eclipselink.tenant-idプロパティを使用して、マルチテナント・エンティティの移入に使用するデフォルトのコンテキスト・プロパティを指定します。

値

表5-97は、この永続性プロパティの値を説明しています。

表5-97 tenant-idの有効値

Value

説明

value

デフォルトのコンテキスト・プロパティの名前。

使用方法

これはデフォルトのマルチテナント・プロパティです。単独で使用することも、ユーザーが定義した他のプロパティと使用することもできます。このプロパティは使用しなくても構いません。独自のものを自由に指定できます。

例

例5-125に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-125 persistence.xmlでのtenant-idの使用

<property name="eclipselink.tenant-id" value="Oracle"/>

例5-126に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-126 プロパティ・マップでのtenant-idの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertyMap.put(PersistenceUnitProperties.MULTI_TENANT_PROPERTY_DEFAULT,
"Oracle");

transaction.join-existing

eclipselink.transaction.join-existingプロパティを使用して、永続性コンテキストでJTA管理の(書込み)接続による読取りを強制的に行います

(アクティブなトランザクションが存在する場合)。

値

表5-98は、この永続性プロパティの値を説明しています。

表5-98 transaction.join-existingの有効値

Value

説明

true

永続性コンテキストでJTA管理の接続による読取りを強制的に行います。

false

(デフォルト)永続性コンテキストでJTA管理の接続による読取りを強制的には行いません。

使用方法

このプロパティをpersistence.xmlに設定するか、またはcreateEntityManagerFactoryに渡すと、ファクトリによって作成されるすべてのEntityManagersに影響を及ぼします。このプロパティがtrueに設定されている場合、トランザクション中に読み取られたオブジェクトは、更新されないかぎり共有キャッシュに配置されません。または、このプロパティを一部のEntityManagersにのみ適用するには、createEntityManagerメソッドに渡します。

例

例5-127に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-127 persistence.xmlでのtransaction.join-existingの使用

<property name="eclipselink.transaction.join-existing" value="true"/>

例5-128に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-128 プロパティ・マップでのtransaction.join-existingの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertyMap.put(PersistenceUnitProperties.TRANSACTION_JOIN_EXISTING,
"true");

関連項目

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

- EclipseLinkソリューション・ガイドの自動チューニングに関する項

tuning

eclipselink.tuningプロパティを使用して、永続性ユニットの構成に使用するチューナのタイプを選択します。

値

表5-99は、この永続性プロパティの値を説明しています。

表5-99 tuningの有効値

Value

説明

standard

(デフォルト)標準のチューナが使用され、デフォルトの構成設定はいずれも変更されません。

safe

デバッグ用の永続性ユニットを構成します。これにより、キャッシングおよび複数のパフォーマンス最適化が無効になります。開発およびデバッグ構成の簡略化を意図したものです。

カスタム・チューナ

org.eclipse.persistence.tools.tuning.SessionTunerインタフェースを実装する完全なクラス名を指定します。

使用方法

自動チューニングを使用して、複数の構成プロパティを単一フラグの一部として設定し、アプリケーション開発の様々な段階で動的チューニングを実行します。

例

例5-129に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-129 persistence.xmlでのtuningの使用

<property name="eclipselink.tuning" value="safe"/>

validate-existence

eclipselink.validate-existenceプロパティを使用して、EclipseLinkによりpersist()でオブジェクトの存在を検証するかどうかを指定します。

値

表5-100は、この永続性プロパティの値を説明しています。

表5-100 validate-existenceの有効値

Value

説明

true

オブジェクトの存在が検証されます。

false

(デフォルト)オブジェクトが永続性コンテキストに存在しない場合は、新規オブジェクトであると想定されます。

使用方法

検証されたオブジェクトが永続性コンテキストに存在しない場合は、エラーがスローされます。

例

例5-130に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-130 persistence.xmlでのvalidate-existenceの使用

<property name="eclipselink.validate-existence" value="true"/>

例5-131に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-131 プロパティ・マップでのvalidate-existenceの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertyMap.put(PersistenceUnitProperties.VALIDATE-EXISTENCE,
"true");

validation-only

eclipselink.validation-onlyプロパティを使用して、データ・ソースに接続せずにディスクリプタを初期化し、デプロイメントを検証します。

値

表5-101は、この永続性プロパティの値を説明しています。

表5-101 validation-onlyの有効値

Value

説明

true

EclipseLinkにより、ディスクリプタが初期化されます(ログインなし)。

false

(デフォルト) EclipseLinkにより、ディスクリプタが初期化されます(ログインあり)。

使用方法

eclipselink.validation-onlyをtrueに設定する場合、自動化されていないクラス名または短縮名を使用して、eclipselink.target-databaseを構成する必要もあります。

例

例5-132に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-132 persistence.xmlでのvalidation-onlyの使用

<property name="eclipselink.validation-only" value="true"/>

例5-133に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-133 プロパティ・マップでのvalidation-onlyの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertyMap.put(PersistenceUnitProperties.VALIDATION_ONLY,
"true");

関連項目

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

- 「target-database」

weaving

eclipselink.weavingプロパティを使用して、EclipseLinkでエンティティ・クラスについてウィービングを実行するかどうかを指定します。EclipseLink JPAでは、ウィービングを使用して、遅延ロード、変更追跡、フェッチ・グループ、内部最適化などについてJPAエンティティを拡張します。

値

表5-102は、この永続性プロパティの値を説明しています。

表5-102 weavingの有効値

Value

説明

true

エンティティ・クラスの動的ウィービングが実行されます。

false

エンティティ・クラスのウィービングは実行されません。

static

エンティティ・クラスの静的ウィービングが実行されます。

例

例5-134に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-134 persistence.xmlでのweavingの使用

<property name="eclipse.weaving" value="false"/>

例5-135に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-135 プロパティ・マップでのweavingの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put
(PersistenceUnitProperties.WEAVING, "false");

関連項目

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

- EclipseLinkの理解でのウィービングの使用に関する項

- EclipseLinkソリューション・ガイドのパフォーマンスの拡張に関する項

- 「weaving.changetracking」

- 「weaving.eager」

- 「weaving.fetchgroups」

- 「weaving.internal」

- 「@ChangeTracking」

weaving.changetracking

eclipselink.weaving.changetracking永続性プロパティを使用して、次のことを行います。

- ウィービングによるAttributeLevelChangeTrackingを有効化します。

- すべてのマッピングを含むクラスのみを変更できます。

- 変更追跡を有効化できます。可変の基本属性については、変更追跡されません。

このプロパティは、ウィービングが有効の場合にのみ有効になります。

値

表5-103は、この永続性プロパティの値を説明しています。

表5-103 weaving.changetrackingの有効値

Value

説明

true

(デフォルト)このプロパティを有効化します。

false

このプロパティを無効化します。

例

例5-136に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-136 persistence.xmlでのweaving.changetrackingの使用

<property name="eclipse.weaving.changetracking" value="false"/>

例5-137に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-137 プロパティ・マップでのweaving.changetrackingの使用

import org.eclipselink.persistence.config.PersistenceUnitProperties;
propertiesMap.put
(Persistence.Unit.Properties.WEAVING_CHANGETRACKING,
value="false");

関連項目

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

- 「weaving」

weaving.eager

eclipselink.weaving.eagerプロパティを使用して、即時リレーションシップについてEclipseLinkでインダイレクションを使用するかどうかを指定します。

値

表5-104は、この永続性プロパティの値を説明しています。

表5-104 weaving.eagerの有効値

Value

説明

true

即時リレーションシップについてウィービングによるインダイレクションを有効化します。

false

(デフォルト)即時リレーションシップについてウィービングによるインダイレクションを無効化します。

使用方法

1対1および多対1のマッピングは、FetchType.EAGERを使用して構成されている場合でも、事実上遅延マッピングとなります。

この拡張機能は、weavingがtrueまたはstaticに構成されている場合にのみ使用できます。詳細は、「weaving」を参照してください。

例

例5-138に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-138 persistence.xmlでのweavingの使用

<property name="eclipselink.weaving.eager" value="true"/>

例5-139に、プロパティ・マップでこの拡張機能を使用する方法を示します。

例5-139 プロパティ・マップでのweavingの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put
(PersistenceUnitProperties.WEAVING_EAGER, "true");

関連項目

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

- 「weaving」

weaving.fetchgroups

eclipselink.weaving.fetchgroupsプロパティを使用して、ウィービングによるFetchGroupsを有効化します。有効化すると、ディスクリプタや問合せレベルのFetchGroupsに加えて、レイジー・ダイレクト・マッピングもサポートされます。

FetchGroupsを使用すると、オブジェクトの部分的な読取りおよび書込みが可能になります。フェッチされていない属性にアクセスすると、オブジェクトがリフレッシュ(完全にフェッチ)されます。

このプロパティは、ウィービングが有効の場合にのみ考慮されます。

値

表5-105は、この永続性プロパティの値を説明しています。

表5-105 weaving.fetchgroupsの有効値

Value

説明

true

(デフォルト)ウィービングによるFetchGroupsを有効化します。

false

ウィービングによるFetchGroupsを無効化します。

例

例5-140に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-140 persistence.xmlでのweaving.fetchgroupsの使用

<property name="eclipselink.weaving.fetchgroups value="false"/>

例5-141に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-141 プロパティ・マップでのweaving.fetchgroupsの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put
(PersistenceUnitProperties.WEAVING_FETCHGROUPS, "false")

関連項目

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

- 「weaving」

weaving.internal

eclipselink.weaving.internalプロパティを使用して、EclipseLinkでウィービングによる内部最適化を使用するかどうかを指定します。

値

表5-106は、この永続性プロパティの値を説明しています。

表5-106 weaving.internalの有効値

Value

説明

true

(デフォルト)ウィービングによる内部最適化を有効化します。

false

ウィービングによる内部最適化を無効化します。

使用方法

この拡張機能は、weavingがtrueまたはstaticに構成されている場合にのみ使用できます。詳細は、「weaving」を参照してください。

例

例5-142に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-142 persistence.xmlでのweavingの使用

<property name="eclipselink.weaving.internal" value="false"/>

例5-143に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-143 プロパティ・マップでのweavingの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put
(PersistenceUnitProperties.WEAVING_INTERNAL, "false");

関連項目

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

- 「weaving」

weaving.lazy

eclipselink.weaving.lazyプロパティを使用して、EclipseLinkで1対1または多対1のレイジー・マッピングを使用するかどうかを指定します。

値

表5-107は、この永続性プロパティの値を説明しています。

表5-107 weaving.lazyの有効値

Value

説明

true

(デフォルト)ウィービングによる1対1および多対1マッピングを有効化します。

false

ウィービングによる1対1および多対1マッピングを無効化します。

使用方法

この拡張機能は、weavingがtrueまたはstaticに構成されている場合にのみ使用できます。詳細は、「weaving」を参照してください。

例

例5-144に、persistence.xmlファイルでこのプロパティを使用する方法を示します。

例5-144 persistence.xmlでのweaving.lazyの使用

<property name="eclipselink.weaving.lazy" value="false"/>

例5-145に、プロパティ・マップでこのプロパティを使用する方法を示します。

例5-145 プロパティ・マップでのweaving.lazyの使用

import org.eclipse.persistence.config.PersistenceUnitProperties;
propertiesMap.put
(PersistenceUnitProperties.WEAVING_LAZY, "false");

関連項目

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

- 「weaving」

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

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

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

eclipselink-orm.xmlファイルは、EclipseLinkのオブジェクト・リレーショナル・マッピング・メタデータを定義します。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から入手できます。

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

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

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.xmlのid-class設定は、既存の設定をオーバーライドするか新しいid-class設定を作成します。

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

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