| Oracle® Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス 12c (12.1.2) E48005-01 |
|
![]() 前 |
![]() 次 |
@OrderCorrectionを使用して、データベースから読み取られた順序リストが無効な場合(たとえば、Null、重複、負の値、またはリスト・サイズ以上の値がある場合)に使用する方針を指定します。
有効にするには、n要素の順序リストは{0, 1,..., n-1}である必要があります。
注釈要素
表2-46は、この注釈の要素を示しています。
表2-46 @OrderCorrectionの注釈要素
| 注釈要素 | 説明 | デフォルト |
|---|---|---|
|
value |
(オプション)データベースから読み取られた順序リストが無効な場合に使用する方針を指定します。
|
|
使用方法
@OrderCorrectionを使用すると、Oracle TopLinkが無効なリストの順序を処理する方法を指定できます。
EXCEPTION: OrderCorrectionType=EXCEPTIONの場合、Oracle TopLinkはリストを修正しません。かわりに、Oracle TopLinkは、エラー・コードQueryException.LIST_ORDER_FIELD_WRONG_VALUEでQueryExceptionをスローします。
たとえば、データベースに次の3つのオブジェクトのリストがあるとします。
{null, objectA}; {2, objectB}, {5, ObjectC};
アプリケーションに読み取る際、Oracle TopLinkは例外をスローします。
READ: OrderCorrectionType=READの場合、Oracle TopLinkはアプリケーションに読み取られたリストを修正しますが、データベースに残る無効なリストの順序に関する情報は保持しません。これは、リストを読取り専用で使用する場合は問題になりませんが、リストを変更してデータベースに保存する場合は、順序がキャッシュとは異なり、無効になる可能性が高くなります。
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の場合、Oracle TopLinkは、アプリケーションに読み取られるリストの順序を修正し、データベースに残った無効なリストの順序を記憶します。リストが更新されてデータベースに保存される場合、順序索引はデータベースのリスト順序がキャッシュ内とまったく同じになるように保存されます(そのため、有効になります)。
READ_WRITEモードは、マップ済属性がListまたはVectorのいずれか(つまり、Oracle TopLinkの内部クラス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-85に、この注釈を使用する方法を示します。
例2-85 @OrderCorrection注釈の使用
@OrderColumn(name="ORDER_COLUMN")
@OrderCorrection(EXCEPTION)
List<String> designations;
例2-86に、eclipselink-orm.xmlファイルでこの拡張を使用する方法を示します。
例2-86 XMLでの<element-collection>の使用
<element-collection name="designations">
<order-column name="ORDER_COLUMN" correction-type="EXCEPTION"/>
</element-collection>
関連項目
詳細は、次のドキュメントを参照してください。