В спящем режиме, если вы получаете объект и пытаетесь изменить одно из его свойств и зафиксировать транзакцию.Hibernate сравнивает новые значения со старыми.Выполняет ОБНОВЛЕНИЕ для всех постоянных свойств объекта , только если новое значение хотя бы одного свойства отличается от старого значения.
Пример:
- Найти EntityA по id.Hibernate выдает SELECT для сущности (и любых ленивых сущностей «многие к одному») и запоминает исходные значения.
EntityA a = hibernateSession.find(EntityA.class, id);
- Установить некоторое свойство для entityA.
a.setPhone(newPhoneValue);
- Передает транзакцию, вызывая
hibernateSession.flush().
Hibernate сравнивает новые значения со старыми значениями.Выпускает ОБНОВЛЕНИЕ для всех постоянных свойств x, если старое и новое значение свойства B различаются.
Выполняет обновление, например: UPDATE entityA set phone=?, name=?, updateDate=? WHERE id=?
Если вы хотите, вы можете использовать dynamic-update и dynamic-insert в отображении.
dynamic-update (необязательно - по умолчанию false): указывает, что должен быть сгенерирован UPDATE SQLво время выполнения и может содержать только те столбцы, значения которых изменились.
dynamic-insert (необязательно - по умолчанию false): указывает, что INSERT SQL должен генерироваться во время выполнения и содержать только столбцы, значения которых не равны NULL.
С динамическим обновлениемпри значении true hibernate выдаст UPDATE
без столбца name
, поскольку он не изменился.
UPDATE entityA set phone=?, updateDate=? WHERE id=?