Me sorprendió descubrir recientemente que el comportamiento de hibernación predeterminado es actualizar todos los campos de un objeto si se realiza un único cambio y se llama a la combinación.Actualización dinámica con JPA
dinámico de actualización es el campo que le permite configurar un enfoque alternativo de simplemente actualizar el campo modificado ...
http://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/
estoy usando JPA con Hibernate y traté de añadir el siguiente
@javax.persistence.Entity
@org.hibernate.annotations.Entity(dynamicInsert=true, dynamicUpdate=true)
a mi clase (anteriormente sólo tenían la anotación JPA)
de todos modos, he estado monitorizando el sql y desafortunadamente no lo cambió y todavía estoy viendo todos los campos actualizados.
Esta es mi java que actualiza el objeto ...
@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);
}
y el método de actualización realiza lo siguiente:
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public Object update(Object o) {
Object a = this.entityManager.merge(o);
this.entityManager.flush();
return a;
}
Cualquier ayuda sería apreciada grandemente.
¿Te das cuenta de que la llamada a la actualización es completamente innecesaria? Hibernate automáticamente persiste los cambios realizados en las entidades adjuntas al final de la transacción. –
Oye, ¿alguna vez resolvió esto?Tengo el mismo problema –