Hitachi

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


8.4.2 エンティティに対するpersist操作

エンティティに対するpersist操作を実行するには,EntityManagerのpersistメソッドを呼び出します。EntityManagerのpersistメソッドを呼び出したり,persist処理がカスケードされたりすると,エンティティはデータベースへの永続化や永続化コンテキストでの管理対象になります。

次の表に,persist操作後のエンティティの状態をエンティティの状態ごとに示します。

表8‒9 Persist操作でのエンティティの状態

エンティティの状態

persist操作後のエンティティの状態

new

managedに遷移します。managedに遷移したエンティティはトランザクションのコミット時またはコミット前にデータベースに追加されます。または,flush操作の実行の結果としてデータベースに追加されます。

managed

persist操作は無視されます。ただし,エンティティからほかのエンティティへのリレーションシップのcascade属性にPERSISTまたはALLが指定されていると,このエンティティが参照するエンティティにpersist操作が伝播されます。

detached

データベースにエンティティと対応する行が存在しない場合は,managedに遷移します。対応する行が存在する場合,EntityExistsExceptionが発生します。

removed

managedに遷移します。

注※ CJPAプロバイダの場合,エンティティの状態がnewまたはdetachedの場合,データベース上にエンティティに対応するデータが存在するかどうかでエンティティの状態遷移の結果が異なります。CJPAプロバイダの場合,次のことに注意してください。

注意事項

エンティティをデータベースに永続化したり,データベースからエンティティの情報を読み込んだりするタイミングで,エンティティは永続化コンテキストに登録されます。エンティティをmanagedに遷移したあとに,永続化処理をロールバックした場合は,エンティティは永続化コンテキストで管理されていないので注意してください。