Я был удивлен, узнав, что поведение по умолчанию в спящем режиме - обновлять все поля в объекте, если выполняется только одно изменение, и вызывается слияние.Динамическое обновление с JPA
Dynamic-обновление поля, которое позволяет настроить альтернативный подход просто обновление измененного поля ...
http://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/
Я использую JPA с спящим режимом, и я попытался добавить следующее
@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;
}
Любая помощь будет очень цениться.
Вы понимаете, что вызов обновления абсолютно не нужен? Hibernate автоматически сохраняет изменения, внесенные на присоединенных объектах в конце транзакции. –
Эй, ты когда-нибудь это решил?У меня такая же проблема –