6
votes

Mise à jour dynamique avec jpa

J'ai été surpris de récemment apprendre que le comportement hibernate par défaut consiste à mettre à jour tous les champs d'un objet si seulement un seul changement est effectué et que la fusion est appelée.

Dynamic-Update est le champ qui vous permet de configurer Une approche alternative de simplement mettre à jour le champ changé ...

http://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/

J'utilise JPA avec hibernate et j'ai essayé d'ajouter ce qui suit < / p> xxx

à ma classe (précédemment, il n'avait que l'annotation JPA)

Quoi qu'il en soit, j'ai surveillé le SQL et malheureusement, cela n'a pas changé et je vois toujours tous les champs mis à jour.

Ceci est mon java qui met à jour l'objet ... xxx

et la méthode de mise à jour utilise les éléments suivants : xxx

Toute aide serait grandement appréciée.


2 commentaires

Est-ce que vous réalisez que l'appel à la mise à jour est totalement inutile? Hibernate persiste automatiquement les modifications apportées à des entités jointes à la fin de la transaction.


Hé, as-tu déjà eu ceci résolu? J'ai le même problème


3 Réponses :


0
votes

Quelques questions pour vous aider:

  • Comment votre getUser () méthode fonctionne?
  • N'utilisez-vous pas d'objets détachés?
  • est l'enregistrement associé en fait entièrement chargé de la base de données?

    Les objets détachés ne sont liés à aucune version originale, donc l'origine du mot détaché . Cela aide à hiberner de faire toute comparaison, ce qui force à effectuer une mise à niveau complète.

    Comme je l'ai vu sur Forum SpringSource , cela ne fonctionne que lorsque l'option SELECT-UPTER-UPDATE est définie sur true qui semble assez logique car hibernate doit maintenant ce qui a été modifié. L'option SELECT-UPDATEZ-UPDATE-UPDATE force l'option pour avoir lu l'original.

    Si votre application lit l'utilisateur complètement de la base de données et ne fonctionne pas avec des objets détachés, je ne peux pas vous aider avec plus d'idées ...


0 commentaires

0
votes

de la documentation hibernate:

Assurez-vous d'importer @ javax.persistence.entity pour marquer une classe en tant qu'entité. C'est une erreur commune d'importer @ org.hibernate.annotations.entity par accident.


1 commentaires

On dirait que l'affiche avait des deux annotations, alors je ne pense pas que l'extrait de la DOCS soit pertinent.



0
votes

Vous êtes en train de créer un objet détaché via l'appel à la fusion (). Dans ce cas, vous devez activer SelectBeforeUpdate. C'est dans les Javadocs.


0 commentaires