ヘッダーをスキップ
Oracle® Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス
12c (12.1.2)
E48005-01
  目次へ移動
目次

前
 
次
 

@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");

関連項目

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