8.4.2 エンティティに対するpersist操作
エンティティに対するpersist操作を実行するには,EntityManagerのpersistメソッドを呼び出します。EntityManagerのpersistメソッドを呼び出したり,persist処理がカスケードされたりすると,エンティティはデータベースへの永続化や永続化コンテキストでの管理対象になります。
次の表に,persist操作後のエンティティの状態をエンティティの状態ごとに示します。
エンティティの状態 |
persist操作後のエンティティの状態 |
---|---|
new※ |
managedに遷移します。managedに遷移したエンティティはトランザクションのコミット時またはコミット前にデータベースに追加されます。または,flush操作の実行の結果としてデータベースに追加されます。 |
managed |
persist操作は無視されます。ただし,エンティティからほかのエンティティへのリレーションシップのcascade属性にPERSISTまたはALLが指定されていると,このエンティティが参照するエンティティにpersist操作が伝播されます。 |
detached※ |
データベースにエンティティと対応する行が存在しない場合は,managedに遷移します。対応する行が存在する場合,EntityExistsExceptionが発生します。 |
removed |
managedに遷移します。 |
- 注意事項
-
エンティティをデータベースに永続化したり,データベースからエンティティの情報を読み込んだりするタイミングで,エンティティは永続化コンテキストに登録されます。エンティティをmanagedに遷移したあとに,永続化処理をロールバックした場合は,エンティティは永続化コンテキストで管理されていないので注意してください。