休止状態で、オブジェクトを取得し、そのプロパティの1つを変更して、トランザクションをコミットしようとした場合。Hibernateは、新しい値を古い値と比較します。プロパティの少なくとも1つの新しい値が古い値と異なる場合にのみ、エンティティのすべての永続プロパティに対してUPDATEを発行します。
例:
- IDでEntityAを検索します。Hibernateはエンティティ(および遅延のない多対1エンティティ)に対してSELECTを発行し、元の値を記憶します。
EntityA a = hibernateSession.find(EntityA.class, id);
- entityAにいくつかのプロパティを設定します。
a.setPhone(newPhoneValue);
- トランザクションをコミットし、
hibernateSession.flush().
Hibernateをトリガーして新しい値を古い値と比較します。propertyBの古い値と新しい値が異なる場合、xのすべての永続プロパティに対してUPDATEを発行します。
次のような更新を発行します:UPDATE entityA set phone=?, name=?, updateDate=? WHERE id=?
必要に応じて、マッピングで動的更新と動的挿入を使用できます。
dynamic-update(オプション-デフォルトはfalse):UPDATE SQLを実行時に生成し、値が変更された列のみを含めることができることを指定します。
dynamic-insert(オプション-デフォルトはfalse):INSERT SQLを実行時に生成し、値がnullでない列のみを含めるように指定します。
dynamic-updateをtrueに設定すると、Hibernateは変更されていないため、列UPDATE
なしでを発行します。name
UPDATE entityA set phone=?, updateDate=? WHERE id=?