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