J'utilise JPA avec Hibernate. Lorsque je modifie un attribut d'un objet et le mets à jour le SQL généré montre toutes les colonnes mises à jour! Pourquoi ne met-il pas à jour uniquement les colonnes modifiées? Y a-t-il un moyen d'y parvenir parce que je pense que ce sera plus optimisé.Pourquoi dans la requête de mise à jour de JPA Hibernate; tous les attributs sont mis à jour dans SQL
Répondre
Par défaut, hibernate inclut tous les champs de la requête de mise à jour. Si vous souhaitez exclure cette soit utiliser une mise à jour personnalisée HQL ou vous pouvez configurer hibernate à exclure les champs non modifiés dans la requête de mise à jour comme indiqué dans ce article. Ceci est fait en ajoutant dynamic-update="true"
dans votre mapping de classe.
<class ... table="your_table" .... dynamic-update="true">
Dans une grande table avec plusieurs colonnes (conception de l'héritage) ou contient de grands volumes de données, cela aura un grand impact sur les performances du système. Il peut avoir un impact sur les performances comme indiqué here. Donc, mesurez les performances de votre code avant de l'implémenter.
Lire l'API here pour plus d'informations.
Si vous utilisez des annotations,
@org.hibernate.annotations.Entity(selectBeforeUpdate=true)
Il est une annotation spécifique de mise en veille prolongée, et non disponible dans JPA. Voici un bon article lien vers les détails.
J'ai eu un problème ces 4-5 derniers jours qui me rendaient folle.
Une opération de suppression utilisait TOUTES les colonnes au lieu de simplement la colonne de clé primaire.
Par exemple.
DELETE FROM MYTABLE WHERE ID=? AND NAME=? AND VALUE=?
Lorsque j'ai supprimé l'annotation "dynamicUpdate = true", Hibernate commencé à générer le droit SQL, par exemple.
DELETE FROM MYTABLE WHERE ID=?
Il était à l'origine des problèmes désagréables sur Oracle 11g, quand VALUE
était un CLOB.
- 1. mes tous les panneaux de mise à jour sont mis à jour ensemble erreur javascript
- 2. La mise à jour et les événements de modèle mis à jour sont ignorés
- 3. Hibernate mise à jour de la table B après la table A est mis à jour
- 4. Mise à jour dynamique avec JPA
- 5. mise à jour dans la base de données que les enregistrements mis à jour dans datatable
- 6. Forcer la mise à jour dans Hibernate
- 7. serveur SQL mise à jour de requête
- 8. Pourquoi parfois les attributs de mon objet ne sont pas mis à jour?
- 9. Sql Requête Mise à jour
- 10. déclencheur de mise à jour mise à jour toutes les lignes dans la cible, pas seulement mis à jour?
- 11. SQL mise à jour de requête
- 12. Requête de mise à jour SQL
- 13. Hibernate exception - impossible d'exécuter la requête de mise à jour
- 14. J'ai SQL requête Mise à jour Problème
- 15. hibernate paresseux chargement pas mis à jour
- 16. Hibernate session.save avec la requête de mise à jour
- 17. mise à jour des images du storyboard de base afin que tous les autres storyboards sont mis à jour
- 18. JPA/Hibernate n'émet aucune mise à jour lors de la validation dans un environnement EJB/Seam
- 19. Hibernate hbm2ddl.auto = mise à jour ne met pas à jour les définitions de colonne dans MySQL
- 20. Comment obtenir le compte des enregistrements mis à jour dans les données de printemps jpa?
- 21. Les enregistrements ne sont pas mis à jour lorsque l'écouteur PreUpdate est utilisé dans Hibernate
- 22. Fichier journal pour suivre les mises à jour JPA/Hibernate/Insérer tous les jours
- 23. Relation de mise à jour de JPA entre les entités
- 24. Hibernate mettant à jour les entités enfants lors de la mise à jour de l'entité parente
- 25. Java Hibernate - mise à jour compliquée avec sous-requête
- 26. Hibernate mise à jour tableau
- 27. requête de mise à jour dans le serveur SQL
- 28. Hibernate: mise à jour à la somme de l'autre table
- 29. Mise à jour d'une seule requête SQL
- 30. avec la mise à jour record dans la base de données à l'aide JPA
Cela fonctionne correctement lorsque vous utilisez Hibernate uniquement. Mais j'utilise JPA, donc j'utilise uniquement persistence.xml et NOT hibernate.properties. Je fais toutes les déclarations de mes en persistence.xml comme com.kids.domain.Child et là je ne suis pas capable d'utiliser ce drapeau –
Deepak
@Deepak: Désolé pour le retard, j'ai mis à jour la réponse avec les détails. – ManuPK
Je me demande pourquoi l'équipe d'Hibernate a choisi de mettre à jour toutes les colonnes par défaut –