J'ai été surpris d'apprendre récemment que le comportement de mise en veille prolongée par défaut consiste à mettre à jour tous les champs d'un objet si une seule modification est effectuée et que la fusion est appelée.Mise à jour dynamique avec JPA
dynamique de mise à jour est le domaine qui vous permet de configurer une autre approche de la mise à jour juste le champ a été modifié ...
http://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/
J'utilise JPA avec mise en veille prolongée et j'ai essayé d'ajouter le suivant
@javax.persistence.Entity
@org.hibernate.annotations.Entity(dynamicInsert=true, dynamicUpdate=true)
à ma classe (auparavant il n'avait l'annotation JPA)
Quoi qu'il en soit, j'ai suivi de la sql et malheureusement, il n'a pas changé et je vois toujours tous les champs mis à jour.
Ceci est mon java qui met à jour l'objet ...
@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);
}
et la méthode de mise à jour effectue les opérations suivantes:
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public Object update(Object o) {
Object a = this.entityManager.merge(o);
this.entityManager.flush();
return a;
}
Toute aide serait grandement appréciée.
Vous rendez-vous compte que l'appel à la mise à jour est complètement inutile? Hibernate conserve automatiquement les modifications apportées aux entités attachées à la fin de la transaction. –
Hey, avez-vous déjà résolu cela?J'ai le même problème –