Hibernate - exemple d'attribut de mise à jour dynamique
Qu'est-ce que la mise à jour dynamique
L'attribut dynamic-update indique à Hibernate s'il faut inclure les propriétés non modifiées dans l'instruction SQL UPDATE.
Exemple de mise à jour dynamique
1. dynamic-update = false
La valeur par défaut de dynamic-update est false, ce qui signifieinclude unmodified properties dans l'instruction de mise à jour SQL d'Hibernate.
Par exemple, obtenez un objet et essayez de modifier sa valeur et de le mettre à jour.
Query q = session.createQuery("from StockTransaction where tranId = :tranId "); q.setParameter("tranId", 11); StockTransaction stockTran = (StockTransaction)q.list().get(0); stockTran.setVolume(4000000L); session.update(stockTran);
Hibernate générera l'instruction SQL de mise à jour suivante.
Hibernate: update example.stock_transaction set DATE=?, PRICE_CHANGE=?, PRICE_CLOSE=?, PRICE_OPEN=?, STOCK_ID=?, VOLUME=? where TRAN_ID=?
Hibernate mettra à jour toutes les colonnes non modifiées.
2. dynamic-update = true
Si vous définissez l'insertion dynamique sur true, ce qui signifieexclude unmodified properties dans l'instruction de mise à jour SQL d'Hibernate.
Par exemple, obtenez un objet et essayez de modifier sa valeur et de le mettre à jour à nouveau.
Query q = session.createQuery("from StockTransaction where tranId = :tranId "); q.setParameter("tranId", 11); StockTransaction stockTran = (StockTransaction)q.list().get(0); stockTran.setVolume(4000000L); session.update(stockTran);
Hibernate générera une instruction SQL de mise à jour différente.
Hibernate: update example.stock_transaction set VOLUME=? where TRAN_ID=?
Hibernate mettra uniquement à jour les colonnes modifiées.
Performance issue
Dans une grande table avec de nombreuses colonnes (conception héritée) ou contenant de gros volumes de données, la mise à jour de certaines colonnes non modifiées est absolument inutile et a un impact important sur les performances du système.
Comment le configurer
Vous pouvez configurer les propriétés «dynamic-update
» via une annotation ou un fichier de mappage XML.
1. Annotation
@Entity @Table(name = "stock_transaction", catalog = "example") @org.hibernate.annotations.Entity( dynamicUpdate = true ) public class StockTransaction implements java.io.Serializable {
2. Mappage XML
Conclusion
Ce petit ajustement «dynamic-update» augmentera certainement les performances de votre système et il est fortement recommandé de le faire.
Suivre
1. Hibernation - Exemple dedynamic-insert attribute