1. ホーム

[解決済み】Hibernateの各保存方法の違いは何ですか?

2022-04-11 15:50:48

質問

Hibernateには、何らかの方法でオブジェクトを受け取り、それをデータベースに格納するメソッドがいくつかあります。これらのメソッドにはどのような違いがあり、いつどれを使用するのか、また、いつ何を使用するのかを知っている1つのインテリジェントなメソッドがないのはなぜですか?

これまでに確認したメソッドは。

  • save()
  • update()
  • saveOrUpdate()
  • saveOrUpdateCopy()
  • merge()
  • persist()

解決方法は?

以下は、私の理解する方法です。 主にこれらは API とはいえ、実際にはこれらすべてを使うことはないのですが。

saveOrUpdate いくつかのチェックにより、save または update のいずれかを呼び出します。 例えば、識別子が存在しない場合、save が呼ばれます。 そうでなければ、updateが呼ばれます。

保存 エンティティを持続させる。 識別子が存在しない場合は、識別子を割り当てます。 存在する場合は、基本的に更新を行います。 生成されたエンティティのIDを返します。

更新 既存の識別子を使用して、エンティティの永続化を試みます。 識別子が存在しない場合は、例外が投げられると思います。

saveOrUpdateCopy これは非推奨であり、今後使用するべきではありません。 代わりに...

マージ さて、ここからが私の知識の乏しいところです。 ここで重要なのは、トランジェント、デタッチド、パーシステントの違いです。 オブジェクトの状態について詳しくは こちらをご覧ください . save & updateでは、永続的なオブジェクトを扱います。 これらはセッションにリンクされているので、Hibernateは何が変更されたかを知っています。 しかし、一時的なオブジェクトがある場合、セッションは関係ありません。 このような場合、更新にはmergeを、保存にはpersistを使用する必要があります。

パーシスト 前述のように、これは一時的なオブジェクトに使用されます。 生成されたIDを返すわけではありません。