Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)
エンティティには状態があります。エンティティに対して操作するとエンティティの状態は遷移します。ここでは,エンティティの状態の種類,エンティティに対して実行する操作,およびエンティティの操作と状態遷移について説明します。
エンティティの状態には,new,managed,detached,removedの4種類があります。EntityManagerのメソッドを利用してエンティティを操作することで,エンティティの状態が変更されます。
エンティティのそれぞれの状態について次の表に示します。
表6-4 エンティティの状態
エンティティインスタンスの状態 | 説明 |
---|---|
new | 新しく生成された状態のエンティティです。 新しく生成されたエンティティインスタンスは,永続化アイデンティティを持ちません。このため,永続化コンテキストに関連づいていません。 |
managed | 永続化コンテキストに関連づけられた永続化アイデンティティを持ち,永続化コンテキストで管理されている状態です。 |
detached | 永続化コンテキストに関連づけられていない永続化アイデンティティを持つ状態です。 |
removed | 永続化アイデンティティを持ち,永続化コンテキストに関連づけられている状態です。また,エンティティインスタンスがデータベースから削除されることが予定されている状態でもあります。 |
ユーザがデータベースのレコードを検索すると,CJPAプロバイダは取得したデータをエンティティのフィールドに保持します。また,ユーザがデータベースの内容を更新する場合は,永続化コンテキストに登録されているエンティティの状態を変更して,トランザクションをコミットすることでデータベースにエンティティの状態を反映します。このように,エンティティに対して操作することで,データベースの情報を更新します。
エンティティに対する操作の種類を次の表に示します。
表6-5 エンティティに対する操作の種類
操作 | 説明 |
---|---|
flush | エンティティオブジェクトの内容をデータベースに反映します。 |
merge | EntityManagerの管理対象外となっているエンティティオブジェクトをEntityManagerの管理対象とします。 |
persist | エンティティオブジェクトを管理して,永続化します。 |
refresh | エンティティオブジェクトにデータベースの内容を反映します。 |
remove | エンティティオブジェクトを削除予定状態にします。 |
エンティティインスタンスに対する操作と状態遷移について次の図で説明します。
図6-3 エンティティインスタンスに対する操作と状態遷移
エンティティに対する操作と状態遷移について次の表にまとめます。
表6-6 エンティティの状態遷移
操作 | 状態 | |||
---|---|---|---|---|
new | managed | detached | removed | |
persist | managed※1 | managed | managed※1 | managed |
remove | new | removed | 例外※2,※3 | Removed |
merge |
|
|
|
例外※3,※4 |
refresh | 例外※2,※4 | managed※5 | 例外※2,※4 | 例外※2,※4 |
commit | − | ※6 | − | detached |
rollback | − | detached | − | detached |
flush | − | managed | − | detached |
clear | − | detached | − | detached |
(凡例)−:該当しない
注※1 persist操作で例外が発生した場合,状態は遷移しないで元の状態になります。
注※2 発生する例外はIllegalArgumentExceptionです。
注※3 データベース上に対応する行が存在しない場合,操作は無視されます。
注※4 例外時には状態は遷移しないで,元のままとなります。
注※5 データベース上に対応する行が存在しない場合,EntityNotFoundExceptionが発生します。
注※6 トランザクションスコープの永続化コンテキストの場合はdetachedになります。拡張された永続化コンテキストの場合はmanagedになります。
また,persist,remove,merge,refreshをトランザクション外で実行した場合の動作は,永続化コンテキストの種類によって異なります。
エンティティがリレーションシップを持つ場合に,リレーションシップを表すアノテーションのcascade属性を指定すると,エンティティに対する操作が関連するエンティティに対して伝播されます。cascade属性には,次の表に示す値を指定できます。
表6-7 cascade属性の種類
cascade属性の種類 | 説明 |
---|---|
CascadeType.ALL | persist,remove,merge,refreshの操作が関連先に伝播されます。 |
CascadeType.PERSIST | persist操作が関連先に伝播されます。 |
CascadeType.REMOVE | remove操作が関連先に伝播されます。 |
CascadeType.MERGE | merge操作が関連先に伝播されます。 |
CascadeType.REFRESH | refresh操作が関連先に伝播されます。 |
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.