私はそれSession.save()が一時的なオブジェクトを持続させることを知っています。そして、私はそれがまたsaveOrUpdate()、そしてまた持っているのを見るpersist()。
それなら、それsave()はと同等だと思いますSQL INCLUDEよね?
DBにすでに存在するオブジェクトがあり、それを使用しているsave()場合、別の行が含まれるのでしょうか、そのフィールドが更新されるのでしょうか、それとも単に無視されて何も起こらないのでしょうか。
saveとの違いsaveOrUpdate
saveとsaveOrUpdateメソッドの主な違いはsave、新しい識別子を生成INSERTしてデータベースにレコードを作成する一方で、レコードの存在に基づいて更新するsaveOrUpdateことができることです。INSERTしたがってsave、存在チェックを実行せずに続行します。一方、saveOrUpdate存在をチェックします。レコードが存在する場合は更新され、そうでない場合は新しいレコードが挿入されます。
persistとの基本的な違いsave
save1)との最初の違いpersistはそれらのreturnタイプです。saveメソッドと同様に、データベースにpersistもINSERT記録されますが、return type ofpersistはvoid、returntypeofsaveはですSerializable object。
persist2)とのもう1つの違いsaveは、両方のメソッドが一時インスタンスを永続化することです。ただし、persistメソッドは識別子の値が永続インスタンスにすぐに割り当てられることを保証しません。割り当てはフラッシュ時に発生する可能性があります。
save Persists an entity. Will assign an identifier if one doesn't exist.
If one does, it's essentially doing an update.
Returns the generated ID of the entity.
私が提案しているのは、先に進むためにこれを読む必要があるということです。
私の知る限り、それは次のように起こっています。
save()エンティティを保存しているだけですpersist()インスタンスを管理対象エンティティとして変更しています。これは、あなたがそれに対して操作を行い、あなたのトランザクションがまだ開いている場合、あなたが呼び出すときにそれが自動的に保存されることを意味しますflush()(私が間違っていない場合)merge()これも似persist()ていますが、古いインスタンスを変更せずに新しいインスタンスを返します。saveOrUpdate()あなたはここで見ることができますsave()メソッドは、レコードをデータベースに挿入します。ただし、saverupdate()メソッドは、pkが見つかった場合はpkをチェックし、それ以外の場合はデータを更新します。それ以外の場合は、データベースにデータを挿入します。