Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 互換編


8.4.1 エンティティの状態遷移

エンティティには状態があります。エンティティに対して操作するとエンティティの状態は遷移します。ここでは,エンティティの状態の種類,エンティティに対して実行する操作,およびエンティティの操作と状態遷移について説明します。

〈この項の構成〉

(1) エンティティの状態の種類

エンティティの状態には,new,managed,detached,removedの4種類があります。EntityManagerのメソッドを利用してエンティティを操作することで,エンティティの状態が変更されます。

エンティティのそれぞれの状態について次の表に示します。

表8‒5 エンティティの状態

エンティティインスタンスの状態

説明

new

新しく生成された状態のエンティティです。

新しく生成されたエンティティインスタンスは,永続化アイデンティティを持ちません。このため,永続化コンテキストに関連づいていません。

managed

永続化コンテキストに関連づけられた永続化アイデンティティを持ち,永続化コンテキストで管理されている状態です。

detached

永続化コンテキストに関連づけられていない永続化アイデンティティを持つ状態です。

removed

永続化アイデンティティを持ち,永続化コンテキストに関連づけられている状態です。また,エンティティインスタンスがデータベースから削除されることが予定されている状態でもあります。

(2) エンティティに対する操作

ユーザがデータベースのレコードを検索すると,CJPAプロバイダは取得したデータをエンティティのフィールドに保持します。また,ユーザがデータベースの内容を更新する場合は,永続化コンテキストに登録されているエンティティの状態を変更して,トランザクションをコミットすることでデータベースにエンティティの状態を反映します。このように,エンティティに対して操作することで,データベースの情報を更新します。

エンティティに対する操作の種類を次の表に示します。

表8‒6 エンティティに対する操作の種類

操作

説明

flush

エンティティオブジェクトの内容をデータベースに反映します。

merge

EntityManagerの管理対象外となっているエンティティオブジェクトをEntityManagerの管理対象とします。

persist

エンティティオブジェクトを管理して,永続化します。

refresh

エンティティオブジェクトにデータベースの内容を反映します。

remove

エンティティオブジェクトを削除予定状態にします。

(3) エンティティに対する操作と状態遷移

エンティティインスタンスに対する操作と状態遷移について次の図で説明します。

図8‒3 エンティティインスタンスに対する操作と状態遷移

[図データ]

エンティティに対する操作と状態遷移について次の表にまとめます。

表8‒7 エンティティの状態遷移

操作

状態

new

managed

detached

removed

persist

managed※1

managed

managed※1

managed

remove

new

removed

例外※2,※3

Removed

merge

  • コピー元

    new

  • コピー先

    managed

  • コピー元

    managed

  • コピー先

    managed

  • コピー元

    detached

  • コピー先

    managed

例外※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をトランザクション外で実行した場合の動作は,永続化コンテキストの種類によって異なります。

(4) エンティティに対する操作の伝播

エンティティがリレーションシップを持つ場合に,リレーションシップを表すアノテーションのcascade属性を指定すると,エンティティに対する操作が関連するエンティティに対して伝播されます。cascade属性には,次の表に示す値を指定できます。

表8‒8 cascade属性の種類

cascade属性の種類

説明

CascadeType.ALL

persist,remove,merge,refreshの操作が関連先に伝播されます。

CascadeType.PERSIST

persist操作が関連先に伝播されます。

CascadeType.REMOVE

remove操作が関連先に伝播されます。

CascadeType.MERGE

merge操作が関連先に伝播されます。

CascadeType.REFRESH

refresh操作が関連先に伝播されます。