Я был удивлен, когда недавно узнал, что режим гибернации по умолчанию обновляет все поля в объекте, если сделано только одно изменение и вызвано слияние.
Динамическое обновление - это поле, которое позволяет вам настроить альтернативный подход - просто обновить измененное поле ...
http://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/
Я использую JPA с Hibernate, и я попытался добавить следующее
@javax.persistence.Entity
@org.hibernate.annotations.Entity(dynamicInsert=true, dynamicUpdate=true)
для моего класса (ранее у него была только аннотация JPA)
В любом случае, я отслеживал sql, и, к сожалению, он не изменился, и я все еще вижу, как обновляются все поля.
Это моя Java, которая обновляет объект ...
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void setAccountStatusForUser(String username, AccountStatus act){
User u = this.getUser(username);
u.setAccountStatus(act);
this.update(u);
}
и метод обновления выполняет следующие действия:
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public Object update(Object o) {
Object a = this.entityManager.merge(o);
this.entityManager.flush();
return a;
}
Любая помощь будет принята с благодарностью.