Hibernate - Exemple d’attribut dynamic-update

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